在Node.js中相当于Java PBEWITHSHA1ANDDESEDEencryption?

我有inheritance的Java Web应用程序,我应该将其转换为node.js.

其中一部分是数据的encryption。 在Java中,它就像附加代码一样完成。 我会怎么做在节点使用encryption?

密码学方面根本不强,对不起,如果这是真正的基本问题,并提前感谢。

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基于各种search实现:

 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时,它会产生一些“encryption的”乱码,但是当保存到文件时,它不能在Java端读取和解码。 叹。

不能让这些交互操作的原因是Java端使用PBE ,而node.js端使用的是PBKDF2 ,它们用于类似的目的,来自相同的标准文档(PKCS#5),但是具有非常不同的机制在引擎盖下。

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

在代码中,java和node.js之间的抽象级别也有一些不匹配的地方。 您使用的Java API是非常高的级别,并且使用类似OpenSSL的构造。 与此同时,node.js代码处于较低的层次上,逐块粘合在一起。 这可能会导致问题,例如,Java代码引入了特定的填充结构或密码操作模式。

如果这仅仅是为了学习或者非关键的东西,我会build议把java代码改成与node.js代码在同一个更低的层次上,然后把代码一块一块地放在一起:在两边生成密钥并确保他们是一样的,双方ecrypt,并得到相同的输出等。如果你不能改变的Java代码,使用像伪造的东西来获取您的node.js代码在与java代码相同的更高级别。 但正如对这个问题的评论所指出的那样,你可能无法做PBE。

如果这对于真正想要保存的文件是安全的,请致电外部程序(如gpg)来处理encryption,而不是“滚动自己的”文件encryption系统。