MessageDigest的功能及用法(加密解密)
- MessageDigest的功能及用法
- MessageDigest 类为应用程序提供信息摘要算法的功能,如 MD5 或 SHA 算法。信息摘要是安全的单向哈希函数,它接收任意大小的数据,并输出固定长度的哈希值。
- MessageDigest 对象开始被初始化。该对象通过使用 update()方法处理数据。任何时候都可以调用 reset()方法重置摘要。一旦所有需要更新的数据都已经被更新了,应该调用digest() 方法之一完成哈希计算。
- 对于给定数量的更新数据,digest 方法只能被调用一次。在调用 digest 之后,MessageDigest 对象被重新设置成其初始状态。
- 1、public static MessageDigest getInstance(String algorithm)
- throws NoSuchAlgorithmException
- 返回实现指定摘要算法的 MessageDigest 对象。
- algorithm - 所请求算法的名称
- 2、public static MessageDigest getInstance(String algorithm,
- String provider)
- throws NoSuchAlgorithmException,
- NoSuchProviderException
- 返回实现指定摘要算法的 MessageDigest 对象。
- algorithm - 所请求算法的名称
- provider - 提供者的名称。
- 3、public void update(byte[] input)
- 使用指定的 byte 数组更新摘要。
- 4、public byte[] digest()
- 通过执行诸如填充之类的最终操作完成哈希计算。在调用此方法之后,摘要被重置。
- 5、public static boolean isEqual(byte[] digesta,
- byte[] digestb)
- 比较两个摘要的相等性。做简单的字节比较。
- 注意:Provider可以通过 Java.security.Security.getProviders() 方法获取已注册提供者列表。比较常用的有“SUN”
- SUN提供的常用的算法名称有:MD2
- MD5
- SHA-1
- SHA-256
- SHA-384
- SHA-512
- Code举例:
- import java.security.*;
- public class myDigest {
- public static void main(String[] args) {
- myDigest my=new myDigest();
- my.testDigest();
- }
- public void testDigest()
- {
- try {
- String myinfo="我的测试信息";
- //java.security.MessageDigest alg=java.security.MessageDigest.getInstance("MD5");
- java.security.MessageDigest alga=java.security.MessageDigest.getInstance("SHA-1");
- alga.update(myinfo.getBytes());
- byte[] digesta=alga.digest();
- System.out.println("本信息摘要是:"+byte2hex(digesta));
- //通过某中方式传给其他人你的信息(myinfo)和摘要(digesta) 对方可以判断是否更改或传输正常
- java.security.MessageDigest algb=java.security.MessageDigest.getInstance("SHA-1");
- algb.update(myinfo.getBytes());
- if (algb.isEqual(digesta,algb.digest())) {
- System.out.println("信息检查正常");
- }
- else
- {
- System.out.println("摘要不相同");
- }
- }
- catch (java.security.NoSuchAlgorithmException ex) {
- System.out.println("非法摘要算法");
- }
- }
- public String byte2hex(byte[] b) //二行制转字符串
- {
- String hs="";
- String stmp="";
- for (int n=0;n<b.length;n++)
- {
- stmp=(java.lang.Integer.toHexString(b[n] & 0XFF));
- if (stmp.length()==1) hs=hs+"0"+stmp;
- else hs=hs+stmp;
- if (n<b.length-1) hs=hs+":";
- }
- return hs.toUpperCase();
- }
- }
MessageDigest的功能及用法(加密解密)的更多相关文章
- 【java】安全加密MessageDigest的功能及用法【hash一致性算法】
链接地址:https://blog.csdn.net/ma1kong/article/details/2662997 1.查看MessageDigest源码的注释说明 2.和hash一致性算法 什么关 ...
- MessageDigest的功能及用法
MessageDigest 类为应用程序提供信息摘要算法的功能,如 MD5 或 SHA 算法.信息摘要是安全的单向哈希函数,它接收任意大小的数据,并输出固定长度的哈希值. MessageDigest ...
- php实现的三个常用加密解密功能函数示例
目录 算法一: 算法二: 算法三(改进第一个加密之后的算法) 本文实例讲述了php实现的三个常用加密解密功能函数.分享给大家供大家参考,具体如下: 算法一: //加密函数 function lock_ ...
- php加密解密功能类
这两天突发奇想想要用php写一个对日常项目加密以及解密的功能,经过努力简单的封装了一个对php代码进行加密解密的类,一些思想也是来自于网络,初步测试用着还行,可以实现对指定项目的加密以及解密(只针对本 ...
- 基于正则的INI读写工具类,支持加密解密
看到这个标题,有人会问,现在都用xml做配置文件了,谁还用INI文件啊!下面来简单对比一下xml和ini: 1.XML功能强大表达能力强,同时扩展性好. 2.它的主要优势是异构平台的整合.通讯. 3. ...
- java加密-解密小结
加密算法可以分为 双向加密(对称加密.不对称加密) 单向加密(不可逆加密)—— MD5.sha.hmac... 在对称加密算法中,使用的密钥只有一个,发收信双方都使用这个密钥对数据进行加密和解密 有: ...
- Cryptopp iOS 使用 RSA加密解密和签名验证签名
Cryptopp 是一个c++写的功能完善的密码学工具,类似于openssl 官网:https://www.cryptopp.com 以下主要演示Cryptopp 在iOS上的RSA加密解密签名与验证 ...
- RSA加密解密及数字签名Java实现--转
RSA公钥加密算法是1977年由罗纳德·李维斯特(Ron Rivest).阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的.当时他们三人都在麻省理工学院 ...
- 将 Shiro 作为一个许可为基础的应用程序 五:password加密/解密Spring应用
考虑系统password的安全,眼下大多数系统都不会把password以明文的形式存放到数据库中. 一把会採取下面几种方式对password进行处理 password的存储 "编码" ...
随机推荐
- js判断数组中是否包含某个值
/** * 判断数组中是否包含某个值 * @param arr 数组 * @param str 值 * @returns {boolean} */ function contains(arr, str ...
- TCP协议的三次握手、四次挥手
TCP三次握手 TCP的连接的建立需要发送三个包,一次称为三次握手(Three-way Handshake). 三次握手的目的是连接服务器指定端口,建立TCP连接,并同步连接双方的序列号和确认号并交换 ...
- Spark中Task,Partition,RDD、节点数、Executor数、core数目的关系和Application,Driver,Job,Task,Stage理解
梳理一下Spark中关于并发度涉及的几个概念File,Block,Split,Task,Partition,RDD以及节点数.Executor数.core数目的关系. 输入可能以多个文件的形式存储在H ...
- Linux+Apache下如何安装SSL证书
最近很多站长在问linux系统平台下如何安装SSL证书?Linux+Apache下如何安装SSL证书?本文整理了关于Linux+Apache下如何安装SSL证书的相关教程供大家参考,更多SSL证书安装 ...
- Linux内核tracepoints
Linux内核tracepoints 简单介绍 内核中的每个tracepoint提供一个钩子来调用probe函数. 一个tracepoint可以打开或关闭.打开时,probe函数关联到tracepoi ...
- html表单练习
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- javascript实现:在N个字符串中找出最长的公子串
'use strict' module.exports = function 找出最长公子串 (...strings) { let setsOfSubstrings = [] strings.redu ...
- 线程同步、信号量、system v IPC
一.线程同步 条件变量 什么是条件变量? 线程A等待某个条件成立,条件成立,线程A才继续向下执行.线程B的执行使条件成立,条件成立以后唤醒线程A,以继续执行.这个条件就是条件变量. pthread_c ...
- MAC下redis的安装和配置
1.下载 打开官网:https://redis.io/ 选择下载你要的版本压缩包 2.安装 打开终端,cd - 将下载的压缩包拷贝到local目录下:sudo cp Downloads/redis-4 ...
- 程序包管理rpm和yum
Linux程序包管理: API:Application Programming Interface源码包 POSIX:Portable OS 程序源代码 --> 预处理 --> 编译 -- ...