簡體   English   中英

將“AES”指定為KeyGenerator.getInstance()中的算法究竟做了什么?

[英]What exactly does specifying “AES” as the algorithm in KeyGenerator.getInstance() do?

我很困惑為什么在生成加密密鑰時需要指定一個算法,如“AES”,例如..

KeyGenerator kg = KeyGenerator.getInstance("AES");

它顯然不用於指定密鑰的大小,因為AES密鑰可以是128,192或256位。 那部分將通過init()來完成......

kg.init(256, new SecureRandom());
SecretKey key = kg.generateKey();

對於它的價值,上面的示例代碼來自http://android-developers.blogspot.de/2013/02/using-cryptography-to-store-credentials.html

此外,NIST FIPS-197聲明......

沒有為AES算法識別弱密鑰或半弱密鑰,並且對密鑰選擇沒有限制。

...這樣會讓我相信任何 128,192或256位都可以用作密鑰。

顯然,當我獲得密碼實例時指定“AES”,例如..

Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding");

...表示要使用的密碼算法是必要的。 我只是沒有得到為密鑰生成指定它的目的。

謝謝。

如評論中所述,除AES之外的其他鍵可能需要更多關注。 最好采用DES和AES的對稱方法,以便在算法之間切換。

此外,並非所有加密提供程序都可以在內存中創建密鑰。 Java JCA還與硬件密鑰庫兼容。 對於PKCS#11提供程序(例如),在生成密鑰時需要知道密鑰的類型。

暫無
暫無

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

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