《Java编码指南:编写安全可靠程序的75条建议》—— 指南12:不要使用不安全的弱加密算法
本节书摘来异步社区《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月上线运营。公众号【异步图书】,每日赠送异步新书。
相关文章
- java虚拟机学习-JVM内存管理:深入Java内存区域与OOM(3)
- java安全编码指南之:文件IO操作
- java安全编码指南之:Thread API调用规则
- java安全编码指南之:输入注入injection
- java安全编码指南之:死锁dead lock
- java安全编码指南之:输入校验
- java安全编码指南之:字符串和编码
- java安全编码指南之:基础篇
- java安装1.8和1.7,报错:Error: Registry key 'SoftwareJavaSoftJava Runtime Environment'CurrentVers
- 最新秋招,Java八股文!含答案,JAVA核心知识点最详细版(面试必备)
- 【HarmonyOS】【JAVA UI】鸿蒙怎么对图片编码为 base64 和 base64 解码为 PixelMap,并显示在控件上
- 《Java编码指南:编写安全可靠程序的75条建议》—— 指南2:不要在客户端存储未经加密的敏感数据
- java中文乱码解决之道(二)—–字符编码详解:基础知识 + ASCII + GB**
- java设置字符串编码、转码
- java安全编码指南之:ThreadPool的使用
- java安全编码指南之:Thread API调用规则
- java安全编码指南之:异常处理
- java安全编码指南之:可见性和原子性
- java安全编码指南之:输入校验
- java安全编码指南之:Number操作
- java安全编码指南之:声明和初始化
- Java 8中的Base64编码和解码
- java正则表达式过滤html标签
- 浅析Java对集合进行操作时报java.util.ConcurrentModificationException并发修改异常问题:产生原因、单线程/多线程环境解决、CopyOnWriteArrayList线程安全的ArrayList、fail-fast快速失败机制防止多线程修改集合造成并发问题
- 『Java练习生的自我修养』java-se进阶² • 并发与多线程
- JAVA学习.java.sql.date 与java.util.date以及gettime()方法的分析
- Java中获取GBK编码汉字的拼音首字母(包括生僻字)