Tag*_*ada 1 encryption openssl node.js cryptojs
我正在尝试使用CryptoJS 3.1.5解密使用openssl加密的文件.
如果我使用CryptoJS进行加密和解密,一切正常,对于shell中的OpenSSL也是如此,但是当我尝试将CryptoJS与OpenSSL混合时,一切都会出错.
使用以下命令创建文件:
openssl enc -aes-256-cbc -in file.txt -out file.enc -k password
Run Code Online (Sandbox Code Playgroud)
我试着像这样解密:
fs.readFile('file.enc', function(err, data) {
var decrypted = CryptoJS.AES.decrypt(
data.toString(),
"password",
{ mode : CryptoJS.mode.CBC }
);
console.log(decrypted.toString(CryptoJS.enc.Utf8));
});
// Give me this err: Uncaught Error: Malformed UTF-8 data
Run Code Online (Sandbox Code Playgroud)
而在另一方面,我做:
fs.readFile('file.txt', function(err, data) {
var encrypted = CryptoJS.AES.encrypt(
data.toString(),
"password",
{ mode : CryptoJS.mode.CBC });
fs.writeFile('file.enc', encrypted);
});
Run Code Online (Sandbox Code Playgroud)
然后在壳牌:
openssl enc -d -aes-256-cbc -in file.enc -out file2.txt -k password
// Give me this err: bad magic number
Run Code Online (Sandbox Code Playgroud)
我错过了一些明显的东西吗
为了记录,这是我解密openssl文件的方式.
//openssl enc -aes-256-cbc -in file.txt -out file.enc -k password
fs.readFile('file.enc', function(err, data) {
var salt = data.toString("hex", 8, 16),
enc = data.toString("hex", 16, data.length),
derivedParams = CryptoJS.kdf.OpenSSL.execute(
password,
256/32,
128/32,
CryptoJS.enc.Hex.parse(salt)
),
cipherParams = CryptoJS.lib.CipherParams.create({
ciphertext : CryptoJS.enc.Hex.parse(enc)
}),
decrypted = CryptoJS.AES.decrypt(
cipherParams,
derivedParams.key,
{ iv : derivedParams.iv }
);
console.log(hex2a(decrypted.toString())); // result is in hexa
});
Run Code Online (Sandbox Code Playgroud)
这就是我加密以使其与OpenSSL一起工作的方式
fs.readFile('file.txt', function(err, data) {
var encrypted = CryptoJS.AES.encrypt(data.toString(), password);
buff = new Buffer(encrypted.toString(), "base64");
fs.writeFile('file.enc', buff);
});
// openssl enc -d -aes-256-cbc -in file.enc -out file2.txt -k password
Run Code Online (Sandbox Code Playgroud)
希望它能帮到某人:)
| 归档时间: |
|
| 查看次数: |
3607 次 |
| 最近记录: |