亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在 Javascript 中加密并在 Java 中解密 Zip 文件

在 Javascript 中加密并在 Java 中解密 Zip 文件

GCT1015 2022-12-28 11:04:36
我想用javascript加密本地zip文件,然后用java解密。我使用了此鏈接中的代碼https://www.devglan.com/corejava/aes-encryption-javascript-and-decryption-in-java在javascript中加密var AesUtil = function (keySize, iterationCount) {    this.keySize = keySize / 32;    this.iterationCount = iterationCount;};AesUtil.prototype.generateKey = function (salt, passPhrase) {    var key = CryptoJS.PBKDF2(        passPhrase,        CryptoJS.enc.Hex.parse(salt),        {keySize: this.keySize, iterations: this.iterationCount});    return key;};AesUtil.prototype.encrypt = function (salt, iv, passPhrase, plainText) {    var key = this.generateKey(salt, passPhrase);    var encrypted = CryptoJS.AES.encrypt(        plainText,        key,        {iv: CryptoJS.enc.Hex.parse(iv)});    return encrypted.ciphertext.toString(CryptoJS.enc.Base64);};AesUtil.prototype.decrypt = function (salt, iv, passPhrase, cipherText) {    var key = this.generateKey(salt, passPhrase);    var cipherParams = CryptoJS.lib.CipherParams.create({        ciphertext: CryptoJS.enc.Base64.parse(cipherText)    });    var decrypted = CryptoJS.AES.decrypt(        cipherParams,        key,        {iv: CryptoJS.enc.Hex.parse(iv)});    return decrypted.toString(CryptoJS.enc.Utf8);};var CryptoJS = require('crypto-js'),    fs = require('fs');var data = fs.readFileSync("C:\\<my_path>\\scripts.zip");var passPhrase = "123456789123456789";var iv = "a145525c53eafb0258999612b13d9d3e"; //CryptoJS.lib.WordArray.random(128 / 8).toString(CryptoJS.enc.Hex);var salt = "ca70e17a698096cfb42047926713dd62";// CryptoJS.lib.WordArray.random(128 / 8).toString(CryptoJS.enc.Hex);var aesUtil = new AesUtil(128, 1000);var ciphertext = aesUtil.encrypt(salt, iv, passPhrase, data.toString());fs.writeFileSync('C:/Output.encrypted', ciphertext);
查看完整描述

1 回答

?
蕭十郎

TA貢獻1815條經驗 獲得超13個贊

在大多數語言中,將 Zip 文件之類的二進制內容視為字符串通常是一個大錯誤。在 Javascript 方面,CryptoJS 期望提供任意字節序列作為CryptoJS.lib.WordArray參數。


所以,而不是


var ciphertext = aesUtil.encrypt(salt, iv, passPhrase, data.toString());

你應該有


var ciphertext = aesUtil.encrypt(salt, iv, passPhrase, CryptoJS.lib.WordArray.create(data));

在 Java 端,將函數 decrypt 更改為返回一個byte[].


public byte[] decrypt(String salt, String iv, String passphrase, String ciphertext) {

    SecretKey key = generateKey(salt, passphrase);

    byte[] decrypted = doFinal(Cipher.DECRYPT_MODE, key, iv, base64(ciphertext));

    return decrypted;

}

在 中main,將代碼更改為類似于


String fileString = new String(Files.readAllBytes(Paths.get(encryptedPath)));

byte [] decryptedText = aesUtil.decrypt(salt, iv, keyString, fileString);

Files.write(Paths.get(decryptedPath), decryptedText);


查看完整回答
反對 回復 2022-12-28
  • 1 回答
  • 0 關注
  • 244 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號