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