zl程序教程

您现在的位置是:首页 >  后端

当前栏目

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

JAVA编码安全程序 指南 建议 编写 12
2023-09-11 14:17:35 时间
安全敏感的应用程序必须避免使用不安全的弱加密方式。现代计算机的计算能力允许通过蛮干攻击破解这样的加密。例如,数据加密标准(Data Encryption Standard,DES)加密算法被认为是很不安全的;使用DES加密的消息,能够在一天之内被机器(如Electronic Frontier Foundation——简称EFF——的Deep Crack)蛮干攻击破解。

本节书摘来异步社区《Java编码指南:编写安全可靠程序的75条建议》一书中的第1章,第1.12节,作者:【美】Fred Long(弗雷德•朗), Dhruv Mohindra(德鲁•莫欣达), Robert C.Seacord(罗伯特 C.西科德), Dean F.Sutherland(迪恩 F.萨瑟兰), David Svoboda(大卫•斯沃博达),更多章节内容可以访问云栖社区“异步社区”公众号查看。

指南12:不要使用不安全的弱加密算法

安全敏感的应用程序必须避免使用不安全的弱加密方式。现代计算机的计算能力允许通过蛮干攻击破解这样的加密。例如,数据加密标准(Data Encryption Standard,DES)加密算法被认为是很不安全的;使用DES加密的消息,能够在一天之内被机器(如Electronic Frontier Foundation——简称EFF——的Deep Crack)蛮干攻击破解。

违规代码示例

下面的违规代码示例使用了一种弱加密算法(DES)来加密一个字符串输入。

SecretKey key = KeyGenerator.getInstance("DES").generateKey();

Cipher cipher = Cipher.getInstance("DES");

cipher.init(Cipher.ENCRYPT_MODE, key);

// 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);```

####合规解决方案

下面的合规解决方案使用更安全的高级加密标准(Advanced Encryption Standard,AES)算法执行加密。

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);`

使用数学和计算上不安全的加密算法会导致敏感信息的泄露。

在Java SE 7中,弱加密算法可以被禁用;参见Java™ PKI Programmer’s Guide的附录D“Disabling Cryptographic Algorithms”[Oracle 2011a]。

弱加密算法可用于需要易破解的密文的场景 。例如,ROT13密文经常用在论坛和网站,这个加密的目的是保护人们免受信息干扰,而不是保护信息免受他人获取。


谷粒学苑项目实战(十四):实现阿里云视频点播功能(java编码实现) 视频点播(ApsaraVideo for VoD)是集音视频采集、编辑、上传、自动化转码处理、媒体资源管理、分发加速于一体的一站式音视频点播解决方案。
Java中将base64编码字符串转换为图片 前一段时间,在做摄像头拍照上传,摄像头拍的照片为base64编码格式的字符串,需要上传至项目中,则需要使用到将base64编码字符串转换为图片
异步社区 异步社区(www.epubit.com)是人民邮电出版社旗下IT专业图书旗舰社区,也是国内领先的IT专业图书社区,致力于优质学习内容的出版和分享,实现了纸书电子书的同步上架,于2015年8月上线运营。公众号【异步图书】,每日赠送异步新书。