ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

【加密算法】MD5、SHA算法加密工具类

2021-06-02 10:34:05  阅读:206  来源: 互联网

标签:return String bytes SHA static public 加密算法 MD5


加密代码如下,支持MD5、SHA、SHA256、SHA512

 

其中,

MD5生成128位长度的密文

SHA生成160位长度的密文

SHA256生成256位长度的密文

SHA512生成512位长度的密文

 

package com.cheng2839.md5;

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.security.MessageDigest;

/**
 * MD5信息摘要算法
 * 安全散列算法SHA
 * https://www.cnblogs.com/cheng2839/
 */
public class MD5Utils {

    private static final int BASE_NUM = 0x80;
    private static final String BASE_S = "iIHlFP4nxs&gM#J0jeSkhN6LXZQyC*qvrGAfzTK!29Uo-ORm8pWEDa$%tu3bYBVd15w7c@iwhY2@R4F-6WK$xTN1XqAMZJQU97vcsalVIrkf3pj!CHneE5*&got8D#0Odm%uBPyLGzbSj6sDCnvEuqXgZJ@M%kcp2!o1z5FfYy*GOhSIRt$8L0PQ-bax7VBreTlWHAK93&U4imwd#NOqS8kElMRNBIaLs3QnJ7&do4-fF2#P91mwr!pcbZGHU%06";
    private static final int BASE_LEN = BASE_S.length();

    private static final String MD5 = "MD5";
    private static final String SHA_1 = "SHA";
    private static final String SHA_256 = "SHA-256";
    private static final String SHA_512 = "SHA-512";

    public static String encodeMD5(String password) {
        return encodeMD5(password.getBytes());
    }
    public static String encodeSHA(String password) {
        return encodeSHA(password.getBytes());
    }
    public static String encodeSHA256(String password) {
        return encodeSHA256(password.getBytes());
    }
    public static String encodeSHA512(String password) {
        return encodeSHA512(password.getBytes());
    }

    public static String encodeMD5(File file) {
        FileInputStream fis = null;
        try {
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            fis = new FileInputStream(file);
            byte[] buffer = new byte[512];
            int len;
            while ((len=fis.read(buffer, 0, buffer.length)) > 0) {
                baos.write(buffer, 0, len);
            }
            fis.close();
            baos.close();
            return encodeMD5(baos.toByteArray());
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (fis != null) {
                try {
                    fis.close();
                } catch (IOException e) {}
            }
        }
        return null;
    }

    public static String encodeMD5(byte[] bytes) {
        return encode(bytes, MD5);
    }
    public static String encodeSHA(byte[] bytes) {
        return encode(bytes, SHA_1);
    }
    public static String encodeSHA256(byte[] bytes) {
        return encode(bytes, SHA_256);
    }
    public static String encodeSHA512(byte[] bytes) {
        return encode(bytes, SHA_512);
    }
    private static String encode(byte[] bytes, String algorithm) {
        try {
            MessageDigest md5 = MessageDigest.getInstance(algorithm);
            md5.update(bytes);
            return toStr(md5.digest());
        }catch (Exception e){
            e.printStackTrace();
            return null;
        }
    }

    private static String toStr(byte[] bytes) {
        StringBuilder sb = new StringBuilder();
        for (byte b : bytes)
            sb.append(BASE_S.charAt((b+BASE_NUM)%BASE_LEN));
        return sb.toString();
    }

    public static void main(String[] args) {
        System.out.println(encodeMD5("https://www.cnblogs.com/cheng2839/"));
        System.out.println(encodeSHA("https://www.cnblogs.com/cheng2839/"));
        System.out.println(encodeSHA256("https://www.cnblogs.com/cheng2839/"));
        System.out.println(encodeSHA512("https://www.cnblogs.com/cheng2839/"));
    }

}

 

打印输出结果如下:

PqkDLmvrvJ$SgMlr
L10-dkkm#5qY88-PnNTp
-zZ!hX-dZcr%ZYkkZsnL1df!dwqVQxM#
GoqdJa*rS!q1rXeS-8E5@B1!--rQOcZIssckMGB1Un90F*s9JG1NRBstbBmWdMm&

 

标签:return,String,bytes,SHA,static,public,加密算法,MD5
来源: https://www.cnblogs.com/cheng2839/p/14840226.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有