Java 常用加密算法(一)---单向加密算法(MD5/SHA)

简介: MD5加密MD5以512位分组来处理输入的信息,且每一分组又被划分为16个32位子分组,经过了一系列的处理后,算法的输出由四个32位分组组成,将这四个32位分组级联后将生成一个128位散列值。
  1. MD5加密

    MD5以512位分组来处理输入的信息,且每一分组又被划分为16个32位子分组,经过了一系列的处理后,算法的输出由四个32位分组组成,将这四个32位分组级联后将生成一个128位散列值。
    在MD5算法中,首先需要对信息进行填充,使其位长对512求余的结果等于448。因此,信息的位长(Bits Length)将被扩展至N512+448,N为一个非负整数,N可以是零。填充的方法如下,在信息的后面填充一个1和无数个0,直到满足上面的条件时才停止用0对信息的填充。然后,在这个结果后面附加一个以64位二进制表示的填充前信息长度。经过这两步的处理,信息的位长=N512+448+64=(N+1)*512,即长度恰好是512的整数倍。这样做的原因是为满足后面处理中对信息长度的要求。

/**
 * MD5 加密工具类
 * @author mazaiting
 */
public class Md5Util {
    
    /**
     * MD5 加密 生成32位MD5码
     * @param source 需要加密的字符串
     * @return 32位MD5码
     */
    public static String encode(String source) {
        try {
            // 获得MD5 消息摘要
            MessageDigest messageDigest = MessageDigest.getInstance("MD5");
            // 获得指定编码的字节数据
            byte[] sourceBytes = source.getBytes("UTF-8");
            // 指定的字节数组对摘要执行最终更新
            byte[] digestBytes = messageDigest.digest(sourceBytes);
            StringBuffer hexValue = new StringBuffer();
            
            for (int i = 0; i < digestBytes.length; i++) {
                int val = (digestBytes[i] & 0xff);
                if (val < 16){
                    hexValue.append("0");
                }
                hexValue.append(Integer.toHexString(val));
            }
            
            return hexValue.toString(); 
        } catch (NoSuchAlgorithmException e) {
            return null;// 获得MD5 消息摘要异常
        } catch (UnsupportedEncodingException e) {
            return null;// 获得指定编码的字节数据异常
        }       
    }
    
}
  1. SHA
    SHA是一种数据加密算法,该算法经过加密专家多年来的发展和改进已日益完善,现在已成为公认的最安全的散列算法之一,并被广泛使用。该算法的思想是接收一段明文,然后以一种不可逆的方式将它转换成一段(通常更小)密文,也可以简单的理解为取一串输入码(称为预映射或信息),并把它们转化为长度较短、位数固定的输出序列即散列值(也称为信息摘要或信息认证代码)的过程。散列函数值可以说是对明文的一种“指纹”或是“摘要”所以对散列值的数字签名就可以视为对此明文的数字签名。
    安全散列算法SHA(Secure Hash Algorithm,SHA)是美国国家标准技术研究所发布的国家标准FIPS PUB 180,最新的标准已经于2008年更新到FIPS PUB 180-3。其中规定了SHA-1,SHA-224,SHA-256,SHA-384,和SHA-512这几种单向散列算法。SHA-1,SHA-224和SHA-256适用于长度不超过264二进制位的消息。SHA-384和SHA-512适用于长度不超过2128二进制位的消息。

/**
 * 采用SHA 加密
 * @author mazaiting
 */
public class SHAUtil {
    /**
     * SHA 加密 生成40位SHA码
     * @param source 待加密字符串
     * @return 返回40位SHA码
     */
    public static String encode(String source) {
        try {
            // 获取SHA的消息摘要
            MessageDigest messageDigest = MessageDigest.getInstance("SHA");
            // 获取指定编码的字符串字节数组
            byte[] sourceBytes = source.getBytes("UTF-8");
            // 对指定字节数据进行更新
            byte[] digestBytes = messageDigest.digest(sourceBytes);
                
            StringBuffer hexValue = new StringBuffer();
            for (int i = 0; i < digestBytes.length; i++) {
                int val = (digestBytes[i] & 0xff);
                if (val < 16) {
                    hexValue.append("0");
                }
                hexValue.append(Integer.toHexString(val));
            }
            
            return hexValue.toString();
        } catch (NoSuchAlgorithmException e) {
            return null;// 获取SHA的消息摘要异常
        } catch (UnsupportedEncodingException e) {
            return null;// 获取指定编码的字符串字节数组失败
        }       
    }
}
目录
相关文章
|
Java 数据安全/隐私保护
Java实现最电话号码的简单加密源码
Java实现最电话号码的简单加密源码
15 0
|
Java 数据安全/隐私保护
java实现加密电话号码,有具体的加密流程注释
java实现加密电话号码,有具体的加密流程注释
19 0
|
22天前
|
存储 算法 Java
Java数据结构与算法-java数据结构与算法(二)
Java数据结构与算法-java数据结构与算法
64 1
|
16天前
|
搜索推荐 Java
Java排序算法
Java排序算法
18 0
|
16天前
|
搜索推荐 Java
Java基础(快速排序算法)
Java基础(快速排序算法)
22 4
|
19天前
|
存储 算法 JavaScript
Java入门高频考查算法逻辑基础知识3-编程篇(超详细18题1.8万字参考编程实现)
解决这类问题时,建议采取下面的步骤: 理解数学原理:确保你懂得基本的数学公式和法则,这对于制定解决方案至关重要。 优化算法:了解时间复杂度和空间复杂度,并寻找优化的机会。特别注意避免不必要的重复计算。 代码实践:多编写实践代码,并确保你的代码是高效、清晰且稳健的。 错误检查和测试:要为你的代码编写测试案例,测试标准的、边缘情况以及异常输入。 进行复杂问题简化:面对复杂的问题时,先尝试简化问题,然后逐步分析和解决。 沟通和解释:在编写代码的时候清晰地沟通你的思路,不仅要写出正确的代码,还要能向面试官解释你的
32 0
|
22天前
|
XML 存储 算法
Java数据结构与算法-java数据结构与算法(五)
Java数据结构与算法-java数据结构与算法
47 0
|
28天前
|
安全 Java 数据安全/隐私保护
提升 Java 编程安全性 - 代码加密混淆工具的重要性和应用
提升 Java 编程安全性 - 代码加密混淆工具的重要性和应用
|
28天前
|
安全 小程序 Java
java实现微信服务(公众)号用户关注时,获取openid,安全模式下的加密解密实现
java实现微信服务(公众)号用户关注时,获取openid,安全模式下的加密解密实现
17 0
|
30天前
|
算法 搜索推荐 Java
利用java编写的项目设备调配系统代码示例(内含5种设备调配的算法)
利用java编写的项目设备调配系统代码示例(内含5种设备调配的算法)
13 1