本节书摘来异步社区《java编码指南:编写安全可靠程序的75条建议》一书中的第1章,第1.12节,作者:【美】fred long(弗雷德•朗), dhruv mohindra(德鲁•莫欣达), robert c.seacord(罗伯特 c.西科德), dean f.sutherland(迪恩 f.萨瑟兰), david svoboda(大卫•斯沃博达),更多章节内容可以访问云栖社区“异步社区”公众号查看。
安全敏感的应用程序必须避免使用不安全的弱加密方式。现代计算机的计算能力允许通过蛮干攻击破解这样的加密。例如,数据加密标准(data encryption standard,des)加密算法被认为是很不安全的;使用des加密的消息,能够在一天之内被机器(如electronic frontier foundation——简称eff——的deep crack)蛮干攻击破解。
下面的违规代码示例使用了一种弱加密算法(des)来加密一个字符串输入。
cipher cipher = cipher.getinstance("aes");
keygenerator kgen = keygenerator.getinstance("aes");
kgen.init(128); // 192 and 256 bits may be unavailable
secretkey skey = kgen.generatekey();
byte[] raw = skey.getencoded();
secretkeyspec skeyspec = new secretkeyspec(raw, "aes");
cipher.init(cipher.encrypt_mode, skeyspec);
// encode bytes as utf8; strtobeencrypted contains the
// input string that is to be encrypted
byte[] encoded = strtobeencrypted.getbytes("utf8");
// perform encryption
byte[] encrypted = cipher.dofinal(encoded);<code>`</code>
使用数学和计算上不安全的加密算法会导致敏感信息的泄露。
在java se 7中,弱加密算法可以被禁用;参见java™ pki programmer’s guide的附录d“disabling cryptographic algorithms”[oracle 2011a]。
弱加密算法可用于需要易破解的密文的场景 。例如,rot13密文经常用在论坛和网站,这个加密的目的是保护人们免受信息干扰,而不是保护信息免受他人获取。