簡體   English   中英

Java中的AES加密-什么模式?

[英]AES encryption in Java - what mode?

我需要將一些代碼從java移植到處理加密的javascript 給定相同的密鑰,我無法根據現有代碼重現相同的密文。

我懷疑無法找出正確的模式。 附加代碼段-

public String encrypt(String message, String enc_key) throws Exception {
    try {
        initEncrypt(enc_key);

        byte[] encstr = cipher.doFinal(message.getBytes());
        return HexUtil.HextoString(encstr);
    } catch (BadPaddingException nse) {
        throw new Exception("Invalid input String");
    }
}

public void initEncrypt(String key) throws Exception {
    try {
        skeySpec = new SecretKeySpec(HexUtil.HexfromString(key), "AES");
        cipher = Cipher.getInstance("AES");
        // cipher.
        cipher.init(1, skeySpec);
        System.out.println(cipher.getAlgorithm());
    } catch (NoSuchAlgorithmException nsae) {
        throw new Exception("Invalid Java Version");
    } catch (NoSuchPaddingException nse) {
        throw new Exception("Invalid Key");
    }
}

HexToString函數只轉換字節數組中的十六進制字符串鍵。

提供密鑰10663d0b39d73d614116f0b3cbebd666 (十六進制)純文本- hello ,我得到-密文57C758B2B3A8580658A11DBD95109EC4

根據這一如此回答,默認模式應該是AES/ECB/PKCS5Padding

但是,當我嘗試使用相同的值進行加密時我得到了密文-

3874350661ABB0B452A4960FE3953C18

我嘗試了其他各種模式,但是無法匹配密文。 任何幫助將不勝感激。

不要依賴默認行為。 如果您知道這些選項,請繼續進行指定。 如果您不知道這些選項,請去找出它們,然后指定它們。

這兩個加密的消息都使用您的密鑰進行了“ hello”加密..唯一的區別是不同的填充模式:

57C758B2B3A8580658A11DBD95109EC4 decrypts to   68656c6c6f0b0b0b0b0b0b0b0b0b0b0b
                                               h e l l o <-- pkcs5 padding  -->

3874350661ABB0B452A4960FE3953C18 decrypts to   68656c6c6f0000000000000000000000
                                               h e l l o <-- zerro padding  -->

暫無
暫無

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

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