前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MessageDigest用法

MessageDigest用法

作者头像
全栈程序员站长
发布2022-09-14 15:25:00
4630
发布2022-09-14 15:25:00
举报
文章被收录于专栏:全栈程序员必看

大家好,又见面了,我是你们的朋友全栈君。

为什么要使用MessageDigest?

某些金融行业用于进行简单的密码加密。例如:需求某银行对数据库账户取款密码加密。为了保护客户信息的安全,客户取款密码只能客户自己知道,银行方面对此加密,加密后数据保存的数据库。此时可以用MessageDigest进行加密,以及后续其他方案再次加密。

MessageDigest 是什么?

java.security.MessageDigest类为应用程序提供信息摘要算法的功能,如 MD5 或 SHA-1或SHA-256 算法。信息摘要是安全的单向哈希函数,它接收任意大小的数据,并输出固定长度的哈希值。

MessageDigest 对象调用getInstance初始化,使用 update 方法处理数据。任何时候都可以调用 reset 方法重置摘要。一旦所有需要更新的数据都已经被更新了,应该调用 digest 方法之一完成哈希计算。

对于给定数量的更新数据,digest 方法只能被调用一次。在调用 digest 之后,MessageDigest 对象被重新设置成其初始状态。

  • This MessageDigest class provides applications the functionality of a message digest algorithm, such as SHA-1 or SHA-256. Message digests are secure one-way hash functions that take arbitrary-sized data and output a fixed-length hash value. A MessageDigest object starts out initialized. The data is processed through it using the update methods. At any point reset can be called to reset the digest. Once all the data to be updated has been updated, one of the digest methods should be called to complete the hash computation. The digest method can be called once for a given number of updates. After digest has been called, the MessageDigest object is reset to its initialized state.

代码展示:

代码语言:javascript
复制
import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class MessageDigestDemo extends Thread {
    
    
    private static final char[] ch = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };

    public  static void run(String str) {
    
    
        byte[] data = null;
        MessageDigest md;
        try {
    
    
            data = str.getBytes("UTF8");
            //初始化对象
            md = MessageDigest.getInstance("MD5");
            //传送要计算的数据更新操作
            md.update(data);
            //计算的数据生成加密数据
            byte[] resultData = md.digest();
            //测试查看输出
            System.out.println(bytes2HexStr(resultData));
        } catch (NoSuchAlgorithmException e) {
    
    
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (UnsupportedEncodingException e) {
    
    
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    static String bytes2HexStr(byte[] paramArrayOfByte) {
    
    
        StringBuffer localStringBuffer = new StringBuffer(paramArrayOfByte.length * 2);
        for (int i = 0; i < paramArrayOfByte.length; i++)
        {
    
    
            localStringBuffer.append(ch[(paramArrayOfByte[i] >>> 4 & 0xF)]);
            localStringBuffer.append(ch[(paramArrayOfByte[i] & 0xF)]);
        }
        return localStringBuffer.toString();
    }

    public static void main(String[] args) {
    
    
        String text = "loveuu";
        run(text);
    }
}
代码语言:javascript
复制
测试输出:

c591f3416f45f8146de0839266594731

总结:

使用中大多用工具类进行封装,使用时直接调用run(String str)方法,用来传递所要加密的字符串。

更多MessageDigest 方法使用详见JDK文档。

刚开始写技术文章,许多问题不完善,敬请指导!

代码语言:javascript
复制
PS:
参考JDK_API文档
参考http://blog.sina.com.cn/s/blog_4f36423201000c1e.html文章

转载于:https://www.cnblogs.com/JackXv/p/9371543.html

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/157776.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年7月1,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档