Javascript ECB模式下的加密

Javascript ECB模式下的加密,javascript,cryptography,des,cryptojs,Javascript,Cryptography,Des,Cryptojs,我正在处理一个需要使用PKCS1填充的DES ECB的第三方网关。所以这段代码不是我自己用的,而是用来向其他人发送信息的 在你问他们为什么在互联网上使用对称密钥加密之前:我首先必须向他们发送用SHA算法加密的对称密钥,然后才用DES密钥对消息进行编码。 这不是我的主意。但这对我的项目非常重要 我会做我自己的填充功能,所以请不要告诉我添加选项。这段代码只是为了测试DES在我这方面是否工作正常 对于我来说,node.js中的crypt js模块有一种奇怪的行为 代码如下: var C = requi

我正在处理一个需要使用PKCS1填充的DES ECB的第三方网关。所以这段代码不是我自己用的,而是用来向其他人发送信息的

在你问他们为什么在互联网上使用对称密钥加密之前:我首先必须向他们发送用SHA算法加密的对称密钥,然后才用DES密钥对消息进行编码。 这不是我的主意。但这对我的项目非常重要

我会做我自己的填充功能,所以请不要告诉我添加选项。这段代码只是为了测试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和所有其他模块都是最新版本。
有人能给我解释一下吗?

在我看来,你有两个问题:

  • 是Utf8,必须是
    parse
    d,这样
  • ciphertext.toString()
    实际上是一个包含Base64编码密文的字符串,因此在解密过程中需要将其解析为
    Base64

  • 正如Maarten Bodewes在评论中所说的那样,由于您使用的是无填充,您必须确保您的明文是8字节的倍数。

    这一个为我做的,工作非常完美:

    g
    h
    在十六进制中无效,这不是问题吗?DES和ECB都不安全。使用AES和CBC。这不是我的决定。我要对付的是第三方。对的C.enc.Hex.parse只解析十六进制字符串。但是如何对utf8文本进行编码和解码呢?不要解析
    源代码
    ?注意,源代码需要是8字节的倍数。var encrypted=C.DES.encrypt(C.enc.Utf8.parse(source),C.enc.Utf8.parse(key),{mode:C.mode.ECB,padding:C.pad.noppadding});var decrypted=C.DES.decrypt(C.lib.CipherParams.create({ciphertext:C.enc.Base64.parse(encrypted)}),C.enc.Utf8.parse(key),{mode:C.mode.ECB,padding:C.pad.NoPadding}).toString();也不行