node.js中的Java PBewithsha1和Desede加密等价物?

node.js中的Java PBewithsha1和Desede加密等价物?,java,node.js,encryption,cryptography,Java,Node.js,Encryption,Cryptography,我继承了Java web应用程序,并打算将其转换为node.js 其中一部分是数据加密。在Java中,它是像附加代码一样完成的。在使用加密的节点中,我将如何做到这一点 我一点也不擅长密码学,如果这真的是一个基本问题,我很抱歉,请提前感谢 private final String ALGORITHM = "PBEWITHSHA1ANDDESEDE"; private final int ITERATION_COUNT = 20; private final byte[] SALT = {

我继承了Java web应用程序,并打算将其转换为node.js

其中一部分是数据加密。在Java中,它是像附加代码一样完成的。在使用加密的节点中,我将如何做到这一点

我一点也不擅长密码学,如果这真的是一个基本问题,我很抱歉,请提前感谢

private final String ALGORITHM = "PBEWITHSHA1ANDDESEDE";
private final int ITERATION_COUNT = 20;
private final byte[] SALT = {
        (byte)0xc7, (byte)0x73, (byte)0x21, (byte)0x8c,
        (byte)0x7e, (byte)0xc8, (byte)0xee, (byte)0x99
    };
后来

PBEKeySpec pbeKeySpec = new PBEKeySpec("password".toCharArray());
SecretKeyFactory keyFac = SecretKeyFactory.getInstance(ALGORITHM);
SecretKey pbeKey = keyFac.generateSecret(pbeKeySpec);
PBEParameterSpec pbeParamSpec = new PBEParameterSpec(SALT, ITERATION_COUNT);

// Create PBE Cipher
Cipher pbeCipher = Cipher.getInstance(ALGORITHM);

// Initialize PBE Cipher with key and parameters
pbeCipher.init(Cipher.ENCRYPT_MODE, pbeKey, pbeParamSpec);

byte[] encrypted = pbeCipher.doFinal("text to be encrypted");
编辑: 这是我基于各种搜索在node.js中实现该功能的失败尝试:

var crypto = require('crypto');
var SALT = new Buffer('c773218c7ec8ee99', 'hex');
var pass = new Buffer('password');

//digest is by default SHA-1 thats what I need
var key = crypto.pbkdf2Sync(pass, SALT, 20, 56); //[, digest]
//var cipher = crypto.createCipher('des-ede-cbc', key);
var cipher = crypto.createCipher('des-ede', key);
//var cipher = crypto.createCipheriv('des-ede-cbc', key, new Buffer('00000000', 'binary'));
cipher.update(new Buffer('This is to be encoded'));
var encrypted = cipher.final('binary');
console.log(encrypted);
fs.writeFileSync('encrypted.file', encrypted);
当我试图使用
crypto.createCipheriv
时,我不知道将什么作为IV放在那里


在没有IV的情况下使用时,它会产生一些“加密”的胡言乱语,但是当保存到文件中时,它无法在Java端读取和解码。唉。

您无法让这些实现互操作的原因是Java端使用的是
PBE
,node.js端使用的是
PBKDF2
,它们的用途类似,来自相同的标准文档(PKCS#5),但在引擎盖下有非常不同的机制

因为这些是不同的密钥生成算法,所以在每一端生成不同的密钥,从而在解密时得到不同的结果

代码中java和node.js之间的抽象级别也存在一些不匹配之处。您正在使用的JavaAPI是非常高级的,并且使用类似OpenSSL的结构。与此同时,node.js代码处于一个低得多的级别,将各个部分一点一点地粘合在一起。例如,当java代码引入特定的填充结构或密码操作模式时,这可能会导致问题

如果这只是为了学习或其他非关键性的东西,我建议将java代码更改为与node.js代码相同的较低级别,并将各个部分逐一组合起来:在两侧生成密钥并确保它们相同,在两侧加密并获得相同的输出,等等。如果无法更改java代码,使用类似这样的方法使node.js代码与java代码处于相同的更高级别。但是正如上面的评论所指出的,你可能无论如何都不能做PBE


如果这是为了一些“真实”的东西,而您实际上希望保存的文件是安全的,请调用gpg等外部程序来处理加密,而不是“滚动您自己的”文件加密系统。

感谢您详细的回复。不幸的是,这不是学校作业或类似的东西,它是实时系统,最糟糕的是我不能更改Java(解密)部分。在阅读了您的回复后,我决定用Java编写加密部分,nodejs将其作为一个过程生成。它运行良好,但这是一个可怕的、绝望的解决方案。不管怎样,谢谢。