Java to Node.js AES/ECB/pkcs5p添加加密
我在JAVA中有以下加密函数。我正在尝试使用crypto中的密码在Node.js中编写相同的加密。但是,输出是不一样的。它使用相同的键和输入 JAVA 示例输出:0HCkcjWj/PoCZ4ZUFJARs/m4kstigMFk8dQnT0uNhog=(44个字符) Node.js 示例输出:ZHtEbAhrIo7vWOjdMNgW6Q==(24个字符)Java to Node.js AES/ECB/pkcs5p添加加密,node.js,encryption,aes,Node.js,Encryption,Aes,我在JAVA中有以下加密函数。我正在尝试使用crypto中的密码在Node.js中编写相同的加密。但是,输出是不一样的。它使用相同的键和输入 JAVA 示例输出:0HCkcjWj/PoCZ4ZUFJARs/m4kstigMFk8dQnT0uNhog=(44个字符) Node.js 示例输出:ZHtEbAhrIo7vWOjdMNgW6Q==(24个字符) 提前感谢。因此NodeJS代码在功能上与Java代码相同,在NodeJS代码中: 必须使用ECB模式而不是CBC模式: const algor
提前感谢。因此NodeJS代码在功能上与Java代码相同,在NodeJS代码中:
- 必须使用ECB模式而不是CBC模式:
然而,请注意,欧洲央行不使用IV,通常是不安全的,因此不应使用。 更好的选择是CBC模式(保密性)或GCM模式(保密性、真实性/完整性)const algorithm = 'aes-128-ecb'; ... //const iv = Buffer.alloc(16, 0); // remove const cipher = crypto.createCipheriv(algorithm, key, null);
- 不得应用任何键派生函数,即必须删除以下行:
key = crypto.scryptSync(key, 'salt', 16);
getBytes
从来都不是一个好主意(特别是当涉及到密钥时,但这与密文的大小无关)。无关:你必须使用createCipheriv
而不是createCipheriv
来实现ECB模式,这仍然让我感到非常恼火。@Maarten Bodewes-是的,另一种编码也可能是对剩余问题的合理解释,这可能更容易通过OP中的一个具体示例来揭示。不幸的是,目前的代码在这一点上是不可复制的(假设数据/编码相同)。您能否提供输入消息和密钥,以便我们不仅可以比较密文?
const algorithm = 'aes-128-ecb';
...
//const iv = Buffer.alloc(16, 0); // remove
const cipher = crypto.createCipheriv(algorithm, key, null);
key = crypto.scryptSync(key, 'salt', 16);