我正在处理需要DES ECB和PKCS1填充的第三方网关。所以这段代码不是我自己使用的,而是将消息发送给其他人。
在你问他们为什么在互联网上使用对称密钥加密之前:我首先必须发送用SHA算法加密的对称密钥,然后用DES密钥对消息进行编码。 这不是我的想法。但这对我的项目来说非常重要。
我将自己做填充功能,所以请不要指向我的NoPadding选项。这段代码只是为了测试DES是否能正常使用。
我在node.js中面临一个奇怪的(对我来说)crypt-js模块的行为 这是代码:
var C = require('crypto-js'),
source = 'abcdefghabcdefgh',
key = '1234test';
var encrypted = C.DES.encrypt(
C.enc.Utf8.parse(source),
C.enc.Hex.parse(key),
{ mode: C.mode.ECB, padding: C.pad.NoPadding }
).ciphertext.toString();
var decrypted = C.DES.decrypt(
C.lib.CipherParams.create({ ciphertext: C.enc.Utf8.parse(encrypted) }),
C.enc.Hex.parse(key),
{ mode: C.mode.ECB, padding: C.pad.NoPadding }
).toString();
if (source === decrypted) {
console.log('Glad :)');
} else {
console.log('Sad :(');
}
代码不会这样高兴。 Crypto-JS和所有其他模块都是最新版本。 有人可以向我解释一下吗?
答案 0 :(得分:1)
据我所知,你有两个问题:
key
是Utf8,必须parse
这样,ciphertext.toString()
实际上是一个包含Base 64编码密文的字符串,因此您需要在解密期间将其解析为Base64
。正如Maarten Bodewes在评论中所说,由于你没有使用填充,你必须确保你的明文是8字节的倍数。
答案 1 :(得分:1)
这个为我做了,完美地运作:https://gist.github.com/ufologist/5581486