簡體   English   中英

如何像這樣使用 CryptoJS 從 Java 解密密碼加密

[英]How can I decrypt the cipher encrypt from Java using CryptoJS like this

首先,很抱歉我的英語不好,可能會讓你混淆我在說什么。但我真的希望有人能幫助我......

這是我的 Java 代碼來加密密碼:

public static String decryptByAES_CBC(String data, String key) {
    try {
        byte[] decryptFrom = convertHexStringToBytes(data);

        Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding");
        SecretKeySpec keySpec = new SecretKeySpec(key.getBytes(), "AES");

        String iv = new StringBuffer(key).reverse().toString();
        IvParameterSpec ivSpec = new IvParameterSpec(iv.getBytes());

        cipher.init(Cipher.DECRYPT_MODE, keySpec, ivSpec);

        byte[] original = cipher.doFinal(decryptFrom);
        return new String(original);
    } catch (Exception e) {
        LogUtil.exception(e);
        return null;
    }
}

現在開始在 Java 中加密:

EncryptionUtil.encryptByAES_CBC("whywhywhywhywhywhy", "9999999999999999”);

然后得到了結果:

030f7c7d57e82c6fb7d3066363e59c9dd6de7daa486146857552d31403a7cc71

我可以在 CryptoJS 中得到相同的加密結果,這是我的 CryptoJS 代碼:

encodeByAES_CBC(data, key) {
    return CryptoJS.AES.encrypt(data, CryptoJS.enc.Utf8.parse(key), {
            iv : CryptoJS.enc.Utf8.parse(key),
            mode : CryptoJS.mode.CBC,
            padding : CryptoJS.pad.ZeroPadding
        }).ciphertext.toString();
},
decodeByAES_CBC(data, key) {
    return CryptoJS.AES.decrypt(data, CryptoJS.enc.Utf8.parse(key), {
            iv : CryptoJS.enc.Utf8.parse(key),
            mode : CryptoJS.mode.CBC,
            padding : CryptoJS.pad.ZeroPadding
        }).toString(CryptoJS.enc.Utf8);
}

這是讓我感到困惑的問題:例如:

var encrypted = CryptoJS.AES.encrypt("Message", "Secret Passphrase");
var decrypted = CryptoJS.AES.decrypt(encrypted, "Secret Passphrase");
console.log(decrypted.toString(CryptoJS.enc.Utf8)); \\ The output is "Message"

output 是正確的,因為encrypted的參數是CipherParams類型。

但是我不知道當我只有像030f7c7d57e82c6fb7d3066363e59c9dd6de7daa486146857552d31403a7cc71和密鑰9999999999999999這樣的密文時,如何才能獲得正確的解密答案。

Em……就是這樣,希望我說的足夠清楚……

我找到了方法。

var encrypted = CryptoJS.AES.encrypt("Message", "Secret Passphrase”);

CryptoJS.AES.decrypt(CryptoJS.lib.CipherParams.create({
            ciphertext: encrypted.ciphertext,
            salt: encrypted.salt
        }).toString(CryptoJS.format.OpenSSL),key).toString(CryptoJS.enc.Utf8)); \\ The output also is "Message"

在我的 Java 代碼中,因為我使用了 Noppading(注意:Java 中的 Noppading = CryptoJS 中的 Zeropadding,..這給我帶來了很多麻煩......)。所以不需要在 CryptoJS.lib.CipherParams 中添加鹽)。

因此,如果我只能從 Java 加密中獲取密碼和密鑰。我可以解密

CryptoJS.AES.decrypt(CryptoJS.lib.CipherParams.create({
        ciphertext: CryptoJS.enc.Hex.parse(data)
      }).toString(CryptoJS.format.OpenSSL), CryptoJS.enc.Utf8.parse(key), {
        iv : CryptoJS.enc.Utf8.parse(key),
        mode : CryptoJS.mode.CBC,
        padding : CryptoJS.pad.ZeroPadding
    }).toString(CryptoJS.enc.Utf8);

仍然希望我所說的對這個問題足夠清楚。我希望它可以幫助其他人......

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM