本節書摘來異步社群《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密文經常用在論壇和網站,這個加密的目的是保護人們免受資訊幹擾,而不是保護資訊免受他人擷取。