日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

获取可用密码算法的列表

發(fā)布時(shí)間:2023/12/3 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 获取可用密码算法的列表 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

您如何學(xué)習(xí)可用的密碼算法? Java規(guī)范列出了幾種必需的密碼,摘要等,但是提供程序通常提供的不止這些。

幸運(yùn)的是,這很容易了解我們系統(tǒng)上的可用內(nèi)容。



public class ListAlgorithms {public static void main(String[] args) {// Security.addProvider(new// org.bouncycastle.jce.provider.BouncyCastleProvider());// get a list of services and their respective providers.final Map<String, List<Provider>> services = new TreeMap<>();for (Provider provider : Security.getProviders()) {for (Provider.Service service : provider.getServices()) {if (services.containsKey(service.getType())) {final List<Provider> providers = services.get(service.getType());if (!providers.contains(provider)) {providers.add(provider);}} else {final List<Provider> providers = new ArrayList<>();providers.add(provider);services.put(service.getType(), providers);}}}// now get a list of algorithms and their respective providersfor (String type : services.keySet()) {final Map<String, List<Provider>> algs = new TreeMap<>();for (Provider provider : Security.getProviders()) {for (Provider.Service service : provider.getServices()) {if (service.getType().equals(type)) {final String algorithm = service.getAlgorithm();if (algs.containsKey(algorithm)) {final List<Provider> providers = algs.get(algorithm);if (!providers.contains(provider)) {providers.add(provider);}} else {final List<Provider> providers = new ArrayList<>();providers.add(provider);algs.put(algorithm, providers);}}}}// write the results to standard out.System.out.printf("%20s : %s\n", "", type);for (String algorithm : algs.keySet()) {System.out.printf("%-20s : %s\n", algorithm,Arrays.toString(algs.get(algorithm).toArray()));}System.out.println();}} }

系統(tǒng)管理員可以覆蓋標(biāo)準(zhǔn)密碼庫(kù)。 在實(shí)踐中,最安全的方法是始終加載自己的密碼庫(kù)并如上所述手動(dòng)注冊(cè),或者最好在創(chuàng)建新對(duì)象時(shí)將其作為可選參數(shù)傳遞。

演算法

有幾十種標(biāo)準(zhǔn)算法。 我們最可能感興趣的是:

對(duì)稱密碼

  • KeyGenerator –創(chuàng)建對(duì)稱密鑰
  • SecretKeyFactor –在對(duì)稱密鑰和原始字節(jié)之間轉(zhuǎn)換
  • 密碼 -加密密碼
  • AlgorithmParameters –算法參數(shù)
  • AlgorithmParameterGernerator –算法參數(shù)

非對(duì)稱密碼

  • KeyPairGenerator –創(chuàng)建公用/專用密鑰
  • KeyFactor –在密鑰對(duì)和原始字節(jié)之間轉(zhuǎn)換
  • 密碼 -加密密碼
  • 簽名 –數(shù)字簽名
  • AlgorithmParameters –算法參數(shù)
  • AlgorithmParameterGernerator –算法參數(shù)

文摘

  • MessageDigest –摘要(MD5,SHA1等)
  • Mac – HMAC。 就像消息摘要一樣,但也需要加密密鑰,因此攻擊者無(wú)法偽造它

證書(shū)和密鑰庫(kù)

  • 密鑰庫(kù) – JKS,PKCS等
  • CertStore –類似于密鑰庫(kù),但僅存儲(chǔ)證書(shū)。
  • CertificateFactory –在數(shù)字證書(shū)和原始字節(jié)之間轉(zhuǎn)換。

重要的是要記住,大多數(shù)算法都是為了向后兼容而提供的,不應(yīng)在未開(kāi)發(fā)的領(lǐng)域中使用。 在我撰寫(xiě)本文時(shí),普遍接受的建議是:

  • 使用AES的變體。 僅在絕對(duì)確定要加密一個(gè)塊大小(16字節(jié))的數(shù)據(jù)時(shí),才使用AES-ECB。
  • 即使您使用的是AES-CBC,也應(yīng)始終使用良好的隨機(jī)IV。 不要使用相同的IV或容易預(yù)測(cè)的IV。
  • 在非對(duì)稱密鑰中不要使用少于2048位。
  • 使用SHA-256或更高版本。 MD-5被視為已損壞,SHA-1將在不久的將來(lái)被視為已損壞。
  • 使用PBKDF2WithHmacSHA1從密碼/密碼短語(yǔ)創(chuàng)建AES密鑰。 (另請(qǐng)參見(jiàn)創(chuàng)建基于密碼的加密密鑰 。)

有些人可能想要使用其他AES候選密碼之一(例如, twofish )。 這些密碼可能是安全的,但是如果與其他方共享文件,則可能會(huì)遇到問(wèn)題,因?yàn)樗鼈儾辉诒匦璧拿艽a套件中。

當(dāng)心美國(guó)出口限制

最后,重要的是要記住,由于美國(guó)的出口限制,標(biāo)準(zhǔn)的Java發(fā)行版已嚴(yán)重受損。 您可以通過(guò)在系統(tǒng)上安裝標(biāo)準(zhǔn)的僅限美國(guó)的文件來(lái)獲得全部功能,但是對(duì)于開(kāi)發(fā)人員來(lái)說(shuō),要驗(yàn)證這一點(diǎn)已經(jīng)完成就很難了。 實(shí)際上,即使不是大多數(shù)人,許多人也會(huì)使用BouncyCastle之類的第三方加密庫(kù)。 許多沒(méi)有經(jīng)驗(yàn)的開(kāi)發(fā)人員對(duì)此一無(wú)所知,并無(wú)意中使用了殘缺的功能。

翻譯自: https://www.javacodegeeks.com/2014/08/getting-a-list-of-available-cryptographic-algorithms.html

總結(jié)

以上是生活随笔為你收集整理的获取可用密码算法的列表的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。