Java to Node.js AES/ECB/pkcs5p添加加密

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

我在JAVA中有以下加密函数。我正在尝试使用crypto中的密码在Node.js中编写相同的加密。但是,输出是不一样的。它使用相同的键和输入

JAVA 示例输出:0HCkcjWj/PoCZ4ZUFJARs/m4kstigMFk8dQnT0uNhog=(44个字符)

Node.js 示例输出:ZHtEbAhrIo7vWOjdMNgW6Q==(24个字符)


提前感谢。

因此NodeJS代码在功能上与Java代码相同,在NodeJS代码中:

  • 必须使用ECB模式而不是CBC模式:

    const algorithm = 'aes-128-ecb';
    ...
    //const iv = Buffer.alloc(16, 0); // remove
    const cipher = crypto.createCipheriv(algorithm, key, null);
    
    然而,请注意,欧洲央行不使用IV,通常是不安全的,因此不应使用。 更好的选择是CBC模式(保密性)或GCM模式(保密性、真实性/完整性)

  • 不得应用任何键派生函数,即必须删除以下行:

    key = crypto.scryptSync(key, 'salt', 16); 
    

感谢您的详细解释。然而,输出仍然是相同的24个字符,而不是我在Java中得到的44个字符。我在js代码中遗漏了什么吗?我无法使用自己的明文和密钥数据重现这个问题。请发布一个示例,即明文、密钥和两种代码的结果,以重现问题。此外:密文的不同长度表示加密了不同的明文(至少在应用发布的代码时)。因此,重新检查使用的数据(明文和密钥)是否完全相同。也可能是编码错误。毕竟,原始代码中有很多内容;只是
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);