簡體   English   中英

在 Java 中使用 AES-256-ECB 解密

[英]Decrypt using AES-256-ECB in Java

我已經使用AES-256-ECB加密了 PHP 中的字符串。

$sString   = "test"
$sEncryptionMethod = "AES-256-ECB";
$sEncryptionKey = "mysecretkey";

openssl_encrypt($sString, $sEncryptionMethod, $sEncryptionKey)

我想使用 Java/Scala 解密相同的文件嗎?

 String secret = "mysecretkey";
 SecretKeySpec skeySpec = new SecretKeySpec(encKey.getBytes("UTF-8"), "AES");
 byte[] decodedValue = Base64.getDecoder.decode(token);

 Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5PADDING");
 int decryptMode = Cipher.DECRYPT_MODE;
 cipher.init(decryptMode, skeySpec);
 new String(cipher.doFinal(decodedValue));

我看到以下錯誤? 我們如何使用Java解密相同的內容? 注意:(PHP 中的解密按預期工作)但我想在 Java 中執行此操作

Given final block not properly padded. Such issues can arise if a bad key is used during decryption.

密鑰必須正好是 256 位長。 很明顯,PHP "mysecretkey"在對"mysecretkey"執行一些未指定的魔術巫術以獲取 256 位密鑰。 Java 通常不會像 PHP 那樣從事“用戶似乎不知道他們在做什么,呃,我會在黑暗中瘋狂刺殺”,這就是問題所在。

弄清楚“mysecretkey”是如何變成 256 位密鑰的,並在 java 中復制它。

注意:歐洲央行非常不安全 聽起來您對加密的了解還不夠,以至於無法產生實際上難以輕易破解的應用程序。

NB2:請注意,PHP 文檔本身強烈建議“密鑰”應該是某種加密衍生的 256 位安全源。 當您提供損壞的密鑰時, openssl_encrypt實際上會給您一個答案,這一事實openssl_encrypt 見在各種評論上openssl_encrypt PHP手冊,明確突出了一些古怪的事情存在,但沒有非常清楚真正說明什么PHP在這里做。

暫無
暫無

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

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