消息摘要输出证书

package com.gxnu.study.zip;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.security.DigestInputStream;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Arrays;

import org.junit.Test;

public class MD5Ex {
@Test
public void testMD5() throws NoSuchAlgorithmException, IOException{
MessageDigest md = MessageDigest.getInstance("SHA-256");//MD5,SHA-256,SHA-1 创建信息摘要实例算法SHA-256
byte arr[] = Files.readAllBytes(Paths.get("e:","b.ser"));//读取文件到arr数组中
md.update(arr);//使用特定字节arr更新摘要
byte[] result = md.digest();//通过执行填充等最终操作来完成哈希计算
StringBuilder res = new StringBuilder();//多线程不安全
for(byte by:result){
String str = Integer.toHexString(by);//by转为16进制
res.append(str);//追加到res中
}
System.out.println(res);//输出证书

}

@Test
public void testcomplexMD5(){
MessageDigest md = null;
try {
md = MessageDigest.getInstance("SHA-256");//创建信息摘要实例算法SHA-256
} catch (NoSuchAlgorithmException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}//MD5,SHA-256,SHA-1
try(
InputStream is = new FileInputStream("e:/b.ser");//文件读到is中
){
byte[] arr = new byte[4];
int len = -1;
while((len=is.read(arr))>0){
md.update(arr, 0, len);//使用特定字节arr更新摘要
System.out.println(new String(arr,0,len));//追加到res中
}
}catch(Exception e){
e.printStackTrace();

}
byte[] result = md.digest();//通过执行填充等最终操作来完成哈希计算
StringBuilder res = new StringBuilder();//多线程不安全
for(byte by:result){
String str = Integer.toHexString(by);//by转为16进制
res.append(str);//追加到res中
}
System.out.println(res);//输出证书

}

@Test
public void testDigestStreamMD5(){
MessageDigest md = null;
try {
md = MessageDigest.getInstance("SHA-256");//创建信息摘要实例算法SHA-256
} catch (NoSuchAlgorithmException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try(
InputStream fis = Files.newInputStream(Paths.get("e:","b.ser"));//创建文件输入流并读取文件
DigestInputStream dis = new DigestInputStream(fis, md);//使用流fis的位更新关联的消息摘要md
){
byte[] arr = new byte[5];//定义字节数组为5位
int len = -1;
while((len = dis.read(arr))>0){
System.out.println(new String(arr,0,len));
}
byte[] byteArr = md.digest();//使用特定字节arr更新摘要
StringBuilder result = new StringBuilder();//创建一个可变的字符序列
/*for (byte by:byteArr){
String str = Integer.toHexString(by);//by转为16进制
result.append(str);//追加字符到字符序列
}*/
for(int i=0;i<byteArr.length;i+=4){
int temp = (byteArr[i]<<4) | byteArr[i+1];
temp = ((temp<<4) | byteArr[i+2]);
temp = ((temp<<4) | byteArr[i+3]);
result.append(Integer.toHexString(temp));
//<<4 | byteArr[i+2]); <<4 | byteArr[i+3]);
}
System.out.println(result);//输出证书
System.out.println(this.transform(result));//调用transform
// System.out.println(Arrays.toString(byteArr));

}catch(Exception e){
e.printStackTrace();
}
}

private String transform(StringBuilder s){
StringBuilder sb = new StringBuilder();//创建一个可变的字符序列
for(int i =0;i<s.length()-2;i+=2){
sb.append(s.charAt(i)).append(s.charAt(i+1)).append(":");//隔两个字符添加一个冒号

}
sb.append(s.charAt(s.length()-2)).append(s.charAt(s.length()-1));//追加到字符
return sb.toString();//变为字符串
}

}

原文地址:https://www.cnblogs.com/jiminluo/p/9348217.html

时间: 2024-08-02 13:44:39

消息摘要输出证书的相关文章

消息摘要java.security.MessageDigest

这是一种与消息认证码结合使用以确保消息完整性的技术.主要使用单向散列函数算法,可用于检验消息的完整性,和通过散列密码直接以文本形式保存等,目前广泛使用的算法有MD4.MD5.SHA-1,jdk1.5对上面都提供了支持,在java中进行消息摘要很简单, java.security.MessageDigest提供了一个简易的操作方法: /** *MessageDigestExample.java *Copyright 2005-2-16 */ import java.security.Message

iOS消息推送证书生成以及Push消息(转)

iOS消息推送的工作机制可以简单的用下图来概括: Provider是指某个iPhone应用程序的Push服务器,APNS是Apple Push Notification Service的缩写,是苹果的服务器. 上图可以分为三个阶段: 第一阶段:应用程序把要发送的消息.目的iPhone的标识打包,发给APNS. 第二阶段:APNS在自身的已注册Push服务的iPhone列表中,查找有相应标识的iPhone,并把消息发送到iPhone. 第三阶段:iPhone把发来的消息传递给相应的应用程序,并且按

运用Java获取消息摘要

消息摘要简单介绍 消息摘要算法的主要特征是加密过程不需要密钥,并且经过加密的数据无法被解密,只有输入相同的明文数据经过相同的消息摘要算法才能得到相同的密文.消息摘要算法不存在密钥的管理与分发问题,适合于分布式网络相同上使用.由于其加密计算的工作量相当可观,所以以前的这种算法通常只用于数据量有限的情况下的加密,例如计算机的口令就是用不可逆加密算法加密的.近年来,随着计算机相同性能的飞速改善,加密速度不再成为限制这种加密技术发展的桎梏,因而消息摘要算法应用的领域不断增加.现在,消息摘要算法主要应用在

散列函数、消息摘要与数字签名

一, 散列函数(Hash function) 散列函数:任何一种能将任意大小数据映射为固定大小数据的函数,都能被称为散列函数.散列函数的返回值称为散列值.散列码,摘要或者简单散列. 也就是说散列函数能将任意长度的输入变换成固定长度的输出,该输出就是散列值.散列值空间通常远小于输入的空间. 散列函数的一些特性: 消息的长度不受限制 确定性:对于相同的输入(根据同一函数),它必须始终生成相同的散列值,如果两个散列值是不相同的,那么这两个散列值的原始输入也是不相同的, 但是对于不同的输入可能会散列成相

HMAC加密的消息摘要码

HMAC(Hash Message Authentication Code)哈希消息授权码,它在消息摘要算法(例如MD5,SHA系列算法)的基础上,使用密钥对消息摘要进行加密.它相当于一个马甲,内里可以使用MD5,SHA1,SHA256,SHA384,SHA512等Message Digest算法,在生成的消息摘要的基础上再多一道加密的工序.所以HMAC包括,HmacMD5,HmacSHA1,HmacSHA384,HmacSHA512等种类.正是因为HMAC只是一个马甲,它才有了很大的灵活性,底

wcf win7+iis7 异常消息为: 可能证书“CN=PmsWcfServer”没有能够进行密钥交换的私钥

原因是证书没有用户权限,解决方法: 1.开始-运行-mmc 2.添加[证书]管理单元 3.选择[证书(本地计算机)]-[个人]-[证书],右击PmsWcfServer证书-[所有任务]-[管理密钥] wcf win7+iis7 异常消息为: 可能证书"CN=PmsWcfServer"没有能够进行密钥交换的私钥

[Java 安全]消息摘要与数字签名

消息摘要 算法简述 定义 它是一个唯一对应一个消息或文本的固定长度的值,它由一个单向Hash加密函数对消息进行作用而产生.如果消息在途中改变了,则接收者通过对收到消息的新产生的摘要与原摘要比较,就可知道消息是否被改变了.因此消息摘要保证了消息的完整性.消息摘要采用单向Hash 函数将需加密的明文"摘要"成一串密文,这一串密文亦称为数字指纹(Finger Print).它有固定的长度,且不同的明文摘要成密文,其结果总是不同的,而同样的明文其摘要必定一致.这样这串摘要便可成为验证明文是否是

Java安全之消息摘要

消息摘要又称数据指纹,主要用于数据的完整性校验,例如当你在apache下载一个jar包的时候,在下载列表中除了会提供下载链接,还会提供MD5摘要值,当你在下载完成后再对下载的文件计算摘要值,如果摘要值一致,则说明下载过程中没有发生数据丢失或更改,确保数据完整. 消息摘要的算法主要包含MD(Message Digest).SHA(Secure Hash Algorithm)和MAC(Message Authentication Code)共3大系列,也是数据签名的核心算法.MD系列包含MD2,MD

SHA_1计算消息摘要

1 /** 2 * SHA_1计算消息摘要 3 * @param bytes 待计算数据 4 * @return 5 */ 6 public static String SHA_1(byte[] bytes) { 7 String encodeBase64String = null; 8 try { 9 MessageDigest md = MessageDigest.getInstance("SHA1"); 10 md.update(bytes); 11 byte[] _bytes