java aes加密是结果每次都变_请问如何解决 Node 的 aes 加密结果和 JAVA 加密结果不一致的问题...

测试内容:"这是一段需要加密的文字"

测试秘钥:"abcderf123456789"

对于这段文字, JAVA 和 Node.js 加密结果不一致

1、JAVA 中采用的是 AES/ECB/NoPadding 加密算法,核心加密代码如下:

`

SecretKeySpec secretKey = new SecretKeySpec(key.getBytes("UTF-8"), "AES");

Cipher cipher = Cipher.getInstance("AES/ECB/NoPadding");

cipher.init(2, secretKey);

return cipher.doFinal(content)

`

JAVA 加密结果:

`

8F77C5E32AFF4351FE1A61F5C298AA93A403855F2C27D53083FB1D4F45390D0106C9C89F90F4CE42CE71929CC295DFEB

`

2、Node 使用的是 crypto 包。

核心加密算法如下:

`

let crypto = require('crypto');

function encryption(data, key) {

var iv = "";

var clearEncoding = 'utf8';

var cipherEncoding = 'hex';

var cipherChunks = [];

var cipher = crypto.createCipheriv('aes-128-ecb', key, iv);

cipher.setAutoPadding(true);

cipherChunks.push(cipher.update(data, clearEncoding, cipherEncoding));

cipherChunks.push(cipher.final(cipherEncoding));

return cipherChunks.join('').toUpperCase();

}

`

Node 加密结果:

`

8F77C5E32AFF4351FE1A61F5C298AA93A403855F2C27D53083FB1D4F45390D01E5A5B5D6305CFB61487390A15C3BACCF

`

两者比较:

`

8F77C5E32AFF4351FE1A61F5C298AA93A403855F2C27D53083FB1D4F45390D0106C9C89F90F4CE42CE71929CC295DFEB

8F77C5E32AFF4351FE1A61F5C298AA93A403855F2C27D53083FB1D4F45390D01E5A5B5D6305CFB61487390A15C3BACCF

`

发现前面部分加密结果是一样的,后面的加密结果不一致。

在应用中需要 JAVA 端加密, Node.js 来解密,所以需要两者的结果能够对应上(JAVA 端代码不可改,需要考虑如何修改 Node 端的代码),请问如何解决这种问题呢?

补充:

有人说可以先把秘钥md5加密一遍,试过了,还是不行:

`

var md5Sign = function (data) {

// 将字符转换成二进制流

var str = new Buffer(data).toString('binary');

var md5 = crypto.createHash('md5').update(str).digest('hex').slice(0, 16)

return md5

}

var key = md5Sign('abcderf123456789');

var encodeStr = encryption(str, key);

// 结果

// 488DD42D1483C918FD0DD5D3B1FC869B647AE57ABD869A6EA9BF1864773380417C58CFFF0D1AEDFD4FC0A252A1EFAFA0

`

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值