天天看点

《Java编码指南:编写安全可靠程序的75条建议》—— 指南12:不要使用不安全的弱加密算法

本节书摘来异步社区《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密文经常用在论坛和网站,这个加密的目的是保护人们免受信息干扰,而不是保护信息免受他人获取。