当前位置: 首页 > news >正文

加密算法:DigestUtils与java MessageDigest

1.使用Spring的DigestUtils

public class StringUtilTest {  
  
    static final String TARGET = "changeme";      
      
    /*  
     * 不可逆算法  MD5  
     */    
    @Test    
    public void Md5()    
    {    
        String str = DigestUtils.md5DigestAsHex(TARGET.getBytes());    
        System.out.println("md5Hex:     "+str);    
    }    
}  

 

        结果为:

 

        md5Hex:     4cb9c8a8048fd02294477fcb1a41191a


        缺点为:只提供了MD5的加密算法

 

2.使用commons-codec(需要提供commons-codec包)

 

public class UtilTest {  
  
    static final String TARGET = "中文123abc,./";      
      
    /*  
     * 不可逆算法  MD5  
     */    
    @Test    
    public void Md5()    
    {    
        String str = DigestUtils.md5Hex(TARGET);    
        System.out.println("md5Hex:     "+str);    
    }    
    /*  
     * 不可逆算法  SHA1  
     */    
    @Test    
    public void Sha1()    
    {    
        String str = DigestUtils.shaHex(TARGET);    
        print("shaHex:     "+str);    
        str = DigestUtils.sha256Hex(TARGET);    
        print("sha256Hex:  "+str);    
        str = DigestUtils.sha384Hex(TARGET);    
        print("sha384Hex:  "+str);    
        str = DigestUtils.sha512Hex(TARGET);    
        print("sha512Hex:  "+str);    
    }    
        
       
     /*  
      * 可逆算法  BASE64  
      */  
         
    @Test    
    public void Base64()    
    {    
        //加密    
        byte[] b = Base64.encodeBase64(TARGET.getBytes(), true);    
        String str = new String(b);    
        print("BASE64:     "+str);    
            
        //解密    
        byte[] b1 = Base64.decodeBase64(str);    
        print("解密之后内容为:  "+new String(b1));    
    }    
    public void print(Object obj)    
    {    
        System.out.println(obj);    
    }    
}  

 

支持MD5\Sha1\Base64加密和Bse64解密

运行结果:

原始字符串为:中文123abc,./
MD5加密为:9ba58cffe5815ea9f365b86a3f473ad5
Sha1加密为:ec2f9a1f8f601dd5e6889d65204a7a998a0aa389
Base64加密为:5Lit5paHMTIzYWJjLC4v


Base64解密为:中文123abc,./

3.java MessageDigest

@Test  
public void test()   
{  
    try   
    {  
        String password = "12345psw";  
          
        //MD5表示加密算法,可以选择其他参数,如SHA-1等  
        MessageDigest digest = MessageDigest.getInstance("MD5");  
        //先调用update,再调动digest  
        digest.update(password.getBytes());  
        byte[] byteResult = digest.digest();  
          
        //因为加密完为字节数组,需要转化为字符串  
        String result = convertbyte2String(byteResult);  
          
        System.out.println(result);  
    }  
    catch (NoSuchAlgorithmException e)   
    {  
        e.printStackTrace();  
    }  
      
}  
  
//将字节数组转化为字符串  
private String convertbyte2String(byte[] byteResult)   
{  
    char[] hexDigits = {'0','1','2','3','4','5','6','7','8','9', 'A','B','C','D','E','F' };  
      
    //4位代表一个16进制,所以长度需要变为原来2倍  
    char[] result = new char[byteResult.length*2];  
      
    int index = 0;  
    for(byte b:byteResult)  
    {  
        //先转换高4位  
        result[index++] = hexDigits[(b>>>4)& 0xf];  
        result[index++] = hexDigits[b& 0xf];  
    }  
    return new String(result);  
}  

 

转载于:https://www.cnblogs.com/syp172654682/p/8832086.html

相关文章:

  • Spring Extensible XML
  • mooc-IDEA alter enter--008
  • 20172318 2017-2018-2 《程序设计与数据结构》第6周学习总结
  • 坚持不走寻常路 解读“锐捷式”创新的三个突破
  • Java基础-正则表达式(Regular Expression)语法规则简介
  • 你不知道的js坑
  • 关于肥胖和美国为什么那么多胖子
  • 机器视觉技术太阳能光伏硅片EL检测方案
  • BTA | 王涛:传统IT人如何用数据库思维来理解区块链?去中心化数据库也许是答案...
  • Vivint大规模IoT部署的指标收集
  • [NOSQL] Redis介绍
  • JS 面试题总结
  • (翻译)Quartz官方教程——第一课:Quartz入门
  • c++(类) this指针
  • 【Python改变生活!】用pynput控制键盘鼠标!Mac如何卸载python?
  • 【347天】每日项目总结系列085(2018.01.18)
  • 【个人向】《HTTP图解》阅后小结
  • 【跃迁之路】【735天】程序员高效学习方法论探索系列(实验阶段492-2019.2.25)...
  • AngularJS指令开发(1)——参数详解
  • CAP理论的例子讲解
  • github指令
  • Java知识点总结(JavaIO-打印流)
  • LeetCode29.两数相除 JavaScript
  • MYSQL如何对数据进行自动化升级--以如果某数据表存在并且某字段不存在时则执行更新操作为例...
  • Python学习笔记 字符串拼接
  • Sublime text 3 3103 注册码
  • ViewService——一种保证客户端与服务端同步的方法
  • 开年巨制!千人千面回放技术让你“看到”Flutter用户侧问题
  • 老板让我十分钟上手nx-admin
  • 每天一个设计模式之命令模式
  • 盘点那些不知名却常用的 Git 操作
  • ​Distil-Whisper:比Whisper快6倍,体积小50%的语音识别模型
  • ​虚拟化系列介绍(十)
  • #QT(TCP网络编程-服务端)
  • $L^p$ 调和函数恒为零
  • (C++20) consteval立即函数
  • (Redis使用系列) Springboot 整合Redisson 实现分布式锁 七
  • (二开)Flink 修改源码拓展 SQL 语法
  • (附源码)springboot码头作业管理系统 毕业设计 341654
  • (转)Android学习笔记 --- android任务栈和启动模式
  • (转)用.Net的File控件上传文件的解决方案
  • .[hudsonL@cock.li].mkp勒索病毒数据怎么处理|数据解密恢复
  • .Net Attribute详解(上)-Attribute本质以及一个简单示例
  • .NET Core SkiaSharp 替代 System.Drawing.Common 的一些用法
  • .NET Core使用NPOI导出复杂,美观的Excel详解
  • .net wcf memory gates checking failed
  • .Net Web窗口页属性
  • .NET成年了,然后呢?
  • .pings勒索病毒的威胁:如何应对.pings勒索病毒的突袭?
  • /*在DataTable中更新、删除数据*/
  • /etc/shadow字段详解
  • @Autowired注解的实现原理
  • @EventListener注解使用说明
  • @Import注解详解
  • @RequestBody详解:用于获取请求体中的Json格式参数