当前位置:   article > 正文

在DevEco上导入三方库进行RSA公钥解密_js导入biginteger

js导入biginteger

RSA加密算法中,公钥由两个参数组成,即模数n和指数e;私钥也由两个参数组成,即模数n和指数d。加密过程中,明文m通过公钥进行加密得到密文c,加密公式为:c = m^e mod n。解密过程中,密文c通过私钥进行解密得到明文m,解密公式为:m = c^d mod n。

现在已知公钥(n, e)和密文c,我们可以通过指数取模运算得到解密后的明文m。

假设明文为M,密文为C,私钥为d,公钥为e和n(其中n=p*q,p和q为两个大素数),则解密公式为:M = C^e mod n

进行RSA公钥解密具体的密文时,可以通过js的指数取模运算。接口可以参考这个:x.modPowInt(this.e, this.n);

一、导入三方库使接口生效

1.新建一个project,并且使用npm命令下载第三方库

在deveco创建好一个项目后,在terminal中输入:npm install big-integer

结果:

1.2创建一个module,将第三方库的源码放入该module

1.2.1创建module的路径为:File->New->Module

Choose Your Ability Template界面中,选择Static Library,并单击Next

直接finish:

1.2.2将第三方库的js源码直接放入该module中

(放在哪个路径下无所谓,只要在依赖中引入相应路径即可)

1.2.3修改BigInteger.js的源码使其引入生效

以下是BigInteger.js的源码:

稍微修改下,使导入的第三方库生效:

1.3在entry模块中加入依赖项

目录结构如下:

1.3.1将library中的依赖加入配置项

1.3.2在entry模块下的index.ets文件中引入BigInteger文件

二、进行RSA公钥解密

2.1进行格式转换并且验证第三方库是否引入生效

明确公式:假设明文M,密文为C,公钥为e和n,则解密公式为:M = C^e mod n

首先提取公钥中的n和e,然后转换相应的格式。

在这里我们进行一个完整的加解密流程,在这个网站中RSA公私钥生成、RSA加密解密生成一个RSA1024bit,PKCS#1密钥格式的公私钥。

将得到的公私钥保存到本地记录下来,将得到的私钥加密明文:

得到的公钥使用ASN.1解码工具解码提取出e和n:

因为一开始我们生成RSA公私钥的时候输出格式为PEM/Base64,在DER编码中,整数的表示采用了大端字节序的方式。而且ASN.1规定,如果整数的最高位是1,则需要在前面添加一个0x00字节来确保整数的正负性质被正确解析,这就是为什么有时候密钥参数前面会多出1字节 0x00 的原因。需要注意的是,PEM 本身不是 ASN.1 的编码规则,它只是 Base64-encoded DER。所以在代码中传入n的参数时,需要去掉前缀0x00。

将提取出的e和n以及通过在线工具进行私钥加密得到的密文如图所示操作:

得到的log数据为(数据较长,此处分为两部分截取):

为什么会得到这样的数据?

因为这个是RSA算法,PKCS1(V1.5)填充模式,所以该数据需要提取出实际源数据

2.2PKCS填充模式(V1.5)

参考CSDN:加密算法之PKCS填充

具体所需内容截图如下:

又因为得到的plaintextHex已经被转成了16进制,所以在得到的log信息中得出1fffff...中的“1”表示0001。按照上图的PKCS1填充模式描述,得知0001其中00是保留位,“BT”的数据是01,那么按照接下来的“PS”,如果BT为01,则PS全部为FF。继续往后分析,得知源数据为e68891e698afe8beb0e8beb0

源数据是24chars,也就是12个字节。将源数据通过十六进制转二进制,二进制再转成utf-8编码得到中文:我是辰辰

结果如图:

这里通过使用ohos的buffer库,先将源数据从hex string转uint8array,再将uint8array转utf-8 string得到明文。

2.3问题思路

密文是base64编码的数据,公钥需要解出n和e。

这其中的基本思路:

RSA公钥解密:明文M,密文为C,公钥为e和n,则解密公式为:M = C^e mod n

密文=>base64解码=>二进制字节流=>16进制字符串=>大数

数学计算=C^e mod n=明文的大数=>16进制字符串=>二进制字节流=>utf-8编码=>明文

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/339371
推荐阅读
相关标签
  

闽ICP备14008679号