node-rsa模块加密遇到的一些坑_.NET_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > .NET > node-rsa模块加密遇到的一些坑

node-rsa模块加密遇到的一些坑

 2017/7/30 2:38:50  小米爱吃米  程序员俱乐部  我要评论(0)
  • 摘要:一些说在前面的:RSA是一种块加密的算法,所以对于明文需要将他们分成固定的块长度,考虑到输入的数据长度的问题,所以加解密的填充有好几种:无填充,就是直接对明文进行加密PKCS1。将数据长度分成密钥长度-11byte,比如密钥是1024bit,那么长度就是1024/8-11=117bytes,具体的格式:先填0,2,然后随机生成其他的byte,后面才是真正的数据PKCS1_OAEP将数据长度分成密钥长度-41byte,比如密钥是1024bit,那么长度就是1024/8-41=77bytes
  • 标签:

一些说在前面的:

    RSA是一种块加密的算法,所以对于明文需要将他们分成固定的块长度,考虑到输入的数据长度的问题,所以加解密的填充有好几种:

  1. 无填充,就是直接对明文进行加密

  2. PKCS1。将数据长度分成密钥长度-11byte,比如密钥是1024bit,那么长度就是1024/8-11=117bytes,具体的格式:先填0,2,然后随机生成其他的byte,后面才是真正的数据

  3. PKCS1_OAEP将数据长度分成密钥长度-41byte,比如密钥是1024bit,那么长度就是1024/8-41=77bytes,先填0,随机或者是固定的测试向量加20个bytes,然后加20个数字签名的数据,最后才是数据

  4. SSLV23,将数据长度分成密钥长度-11byte,比如密钥是1024bit,那么长度就是1024/8-11=117bytes,具体的格式:先填0,2,填入8个3,填入一个'\0',最后才是真正的数据。

前端需要将密码rsa加密后再传输给后端,所以需要引入一个较小的库,所以用了node-rsa
class="brush:javascript;gutter:true;">import NodeRSA from 'node-rsa'
RSA_PUBLIC_KEY = ‘公钥’
function rsaEncrypt (message, key) {
let clientKey = new NodeRSA(RSA_PUBLIC_KEY)
let encrypted = clientKey.encrypt(message, 'base64')
return encrypted
}

  

这么写是加密出来的结果可能是错滴~在node-rsa模块中加解密默认使用 pkcs1_oaep填充方式 ,而在js中加密解密默认使用的是 pkcs1,在node-rsa中提供了函数可以修改这个选项
function rsaEncrypt (message, key) {
let clientKey = new NodeRSA(RSA_PUBLIC_KEY)
// 在node-rsa模块中加解密默认使用 pkcs1_oaep ,而在js中加密解密默认使用的是 pkcs1
clientKey.setOptions({encryptionScheme: 'pkcs1'}) //就是新增这一行代码
let encrypted = clientKey.encrypt(message, 'base64')
return encrypted
}
 

 

  • 相关文章
发表评论
用户名: 匿名