您如何学习可用的密码算法? Java规范列出了几种必需的密码,摘要等,但是提供程序通常提供的不止这些。

幸运的是,这很容易了解我们系统上的可用内容。

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();}}
}

系统管理员可以覆盖标准密码库。 在实践中,最安全的方法是始终加载自己的密码库并如上所述手动注册,或者最好在创建新对象时将其作为可选参数传递。

演算法

有几十种标准算法。 我们最可能感兴趣的是:

对称密码

  • KeyGenerator –创建对称密钥
  • SecretKeyFactor –在对称密钥和原始字节之间转换
  • 密码 -加密密码
  • AlgorithmParameters –算法参数
  • AlgorithmParameterGernerator –算法参数

非对称密码

  • KeyPairGenerator –创建公用/专用密钥
  • KeyFactor –在密钥对和原始字节之间转换
  • 密码 -加密密码
  • 签名 –数字签名
  • AlgorithmParameters –算法参数
  • AlgorithmParameterGernerator –算法参数

文摘

  • MessageDigest –摘要(MD5,SHA1等)
  • Mac – HMAC。 就像消息摘要一样,但也需要加密密钥,因此攻击者无法伪造它

证书和密钥库

  • 密钥库 – JKS,PKCS等
  • CertStore –类似于密钥库,但仅存储证书。
  • CertificateFactory –在数字证书和原始字节之间转换。

重要的是要记住,大多数算法都是为了向后兼容而提供的,不应在未开发的领域中使用。 在我撰写本文时,普遍接受的建议是:

  • 使用AES的变体。 仅在绝对确定要加密一个块大小(16字节)的数据时,才使用AES-ECB。
  • 即使您使用的是AES-CBC,也应始终使用良好的随机IV。 不要使用相同的IV或容易预测的IV。
  • 在非对称密钥中不要使用少于2048位。
  • 使用SHA-256或更高版本。 MD-5被视为已损坏,SHA-1将在不久的将来被视为已损坏。
  • 使用PBKDF2WithHmacSHA1从密码/密码短语创建AES密钥。 (另请参见创建基于密码的加密密钥 。)

有些人可能想要使用其他AES候选密码之一(例如, twofish )。 这些密码可能是安全的,但是如果与其他方共享文件,则可能会遇到问题,因为它们不在必需的密码套件中。

当心美国出口限制

最后,重要的是要记住,由于美国的出口限制,标准的Java发行版已严重受损。 您可以通过在系统上安装标准的仅限美国的文件来获得全部功能,但是对于开发人员来说,要验证这一点已经完成就很难了。 实际上,即使不是大多数人,许多人也会使用BouncyCastle之类的第三方加密库。 许多没有经验的开发人员对此一无所知,并无意中使用了残缺的功能。

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

获取可用密码算法的列表相关推荐

  1. 遗传算法可用什么算法代替_获取可用密码算法的列表

    遗传算法可用什么算法代替 您如何了解可用的密码算法? Java规范列出了几种必需的密码,摘要等,但是提供程序通常提供的不止这些. 幸运的是,这很容易了解我们系统上的可用内容. public class ...

  2. linux没有找到可用磁盘,在Linux上,有没有一种更像python的方法来获取可用磁盘设备名的列表?...

    编辑我不明白为什么这被标记为重复,因为标识的重复需要导入pyudev.甚至不可能是复制品.在 这很管用,但感觉"蛮力".在 有没有一种更像python的方法来获取Linux上可用磁 ...

  3. 使用Python自动获取可用代理列表

    今天闲来无事,随便写的一个从代理发布网站上提取可用代理列表的脚本. 运行后,可以获取http://cn-proxy.com/发布的可用代理ip和端口的列表. 运行效果如下: 源代码如下,请指教: # ...

  4. python扫描proxy并获取可用代理ip列表

    mac或linux下可以work的代码如下: # coding=utf-8import requests import re from bs4 import BeautifulSoup as bs i ...

  5. 获取令牌密码_如何真正存储用户密码和api令牌(即密码)

    获取令牌密码 A cliché in posts detailing password storage schemes is to finish by telling the syadmins and ...

  6. Mimikatz获取系统密码攻防研究

    Mimikatz是法国人benjamin开发的一款功能强大的轻量级调试工具,本意是用来个人测试,但由于其功能强大,能够直接读取WindowsXP-2012等操作系统的明文密码而闻名于渗透测试,可以说是 ...

  7. 7.6椭圆曲线密码算法

    1.椭圆曲线密码算法 为了保证RSA算法的安全性,其密钥长度不断增加,导致加解密运算负担越来越重,处理速度越来越慢:相比之下,基于椭圆曲线理论的公钥密码体制可以用较短的密钥获得同样的密码强度. 1.椭 ...

  8. 密码算法(SM1、SM2、SM3、SM4、同态加密、密态计算、隐私计算和安全多方计算)

    文章目录 SM1 对称密码 SM2 椭圆曲线公钥密码算法 SM3 杂凑算法 SM4 对称算法 同态加密 密态计算和隐私计算 安全多方计算技术 安全多方计算的应用场景 对称加密算法 非对称加密算法(公钥 ...

  9. 杨元原博士国密课堂 · 第二期 | 商用密码应用安全性评估:Part2. 商用密码算法

    #国密课堂#   第二期 商用密码应用 安全性评估 Part 2. 商用密码算法 在第一期国密课堂 中,杨博士带大家简单了解了密码算法的概念.第二期杨博士带我们继续走近商用密码应用安全性评估领域,进一 ...

最新文章

  1. 配置网络(静态ip)
  2. Object.create(..)和new(..)的内部实现
  3. 一文读懂TOF深度相机技术原理--TI-Tintin-OPT8241二次开发和应用系列--Theory Level
  4. Python入门100题 | 第061题
  5. 资深架构专家聊小团队中微服务困境及分布式事务解决方案
  6. JavaScript正则表达式 exec
  7. win7 php环境搭建 x64,win7搭建php+Apache环境
  8. python跳出循环重新开始_python怎么跳出循环
  9. js layui跳转页面_【WEB前端开辟】layui的iframe跳转链接与页面按钮跳转相干引见...
  10. K-th Number
  11. Windows Server 2003 AD域升级至Windows Server 2008 R2实战案例
  12. 【Codeforces 1421 D】Hexagons,贪心,模拟
  13. 泛泰A860(高通8064 cpu 1080p) 刷4.4专用中文recovery TWRP2.7.1.2版(三版通刷)
  14. 三分钟告诉你MBR和GPT的区别,选择适合自己的
  15. python提取图片中的文字自动填表,python提取图片中的文字并生成word文档
  16. AI 让朱茵秒变杨幂,但我拒绝成为波多野结衣
  17. swift [Application] The app delegate must implement the window property if it wants to use a main 报错
  18. 电商-商流、物流、信息流、资金流
  19. LeetCode-剑指Offe-32-1-从上到下打印二叉树
  20. ACM-ICPC 2021 亚洲区域赛 昆明站

热门文章

  1. android studio 配置国内镜像
  2. idea tomcat部署web项目_项目开发之部署帆软到Tomcat服务一
  3. 网站能拿到其他网站的cookie_网站能给公司带来哪些好处?
  4. thinking-in-java(21)并发2
  5. think-in-java(21)并发
  6. 回归模型和分类模型的区别
  7. 不相交集合求并的路径压缩
  8. 通过aws部署推荐系统_通过AWS Elastic Beanstalk轻松进行Spring Boot部署
  9. apache spark_Apache Spark中的自定义日志
  10. esb 和 开源esb_如果今天完成,ESB会是什么样子?