如何将密文输出转换为数字?

时间:2018-03-28 09:38:50

标签: encryption encoding cryptography nodes

我们如何将rsa算法的输出转换为数字。

  

密文:nq0V69S5fIactNrm0BvG3gI9u2uIU9VjPHVDiy45 / XKjKI7UAypjptmyI0OZQXWsEEvfaEPCJrGbPyPKpz7JSQ ==

将上述密文转换为20位数字

2 个答案:

答案 0 :(得分:0)

如果我理解正确,您希望将密文转换为基数10(十进制)。

首先,您无法选择转换的输出大小,它具有固定的长度,具体取决于原始密文的长度和编码。

其次,在RSA中你已经得到了一个数字。

正如已经提到过的狡猾的ossifrage,你只需要将密文(可以看作是一个非常大的数字)转换为10。

答案 1 :(得分:0)

这个数字肯定大于20位数,因为评论中已经显示出捣蛋。

RSA算法当然产生一个数字,因为主要操作是模幂运算(即ct = m'^ e,其中m'是填充消息)。

但是,RSA PKCS#1规范要求执行一个名为Integer to Octet String Primitive或I2OSP的操作。这会将整数转换为无符号,固定大小的大端编码。八位字符串与字节数组相同。当以最小字节编码时,大小与模数/密钥大小相同。

您的字节数组是基于64位编码的,因此您首先需要对其进行解码,然后将其转换为整数。在默认情况下使用BigEndian编码的Java中,只是执行new BigInteger(1, Base64.decode(encodedCiphertext))的问题,1确保将其解释为正数(符号位的值)。

巧妙的小技巧:计算小数位数,只需将位数除以10,然后乘以3(和一位)。所以512位最多可以提供154个十进制数字。这只是不适合20位数字。

要在结果上创建一个数字,首先需要集中二进制结果的随机性,然后从中提取一个数字。

这可以通过以下方式执行:

  1. 计算结果的安全哈希值;
  2. 将安全哈希解释为一个大的正数;
  3. 将数字减少到数字模数最大值加一。
  4. 为了确保二进制结果的分布相对较好,最好确保散列产生的数字远大于最大值。