[英]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.