Java安全(JCA/JSSE):数字签名
来源:互联网 发布:南苑机场 知乎 编辑:程序博客网 时间:2024/06/05 07:18
数字签名【你的数据的数字摘要,用私钥加密,我用公钥解密成功,那说明这个数据就是你的】
你的公钥必须到公安机关或者权威机构去备案。
package com.xiongshiyan.security;
import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
importjava.security.Key;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
importjava.security.NoSuchAlgorithmException;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.Signature;
//私钥加密 公钥解密
publicclass DataSign {
/**
* @param args
* @throwsException
*/
publicstaticvoid main(String[] args)throws Exception {
//TODO Auto-generatedmethod stub
DataSign.sign();
DataSign.verify();
}
privatestaticvoid sign()throws Exception{
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");//非对称加密方式
KeyPair keyPair = keyPairGenerator.generateKeyPair();
PublicKey publicKey = keyPair.getPublic();
PrivateKey privateKey = keyPair.getPrivate();
Signature signature = Signature.getInstance("MD5WithRSA");
signature.initSign(privateKey);//私钥加密md5
signature.update("给你一百万,绝不反悔".getBytes());
byte[] signed=signature.sign();
//把加密后的数据和key一起给别人 别人拿到了之后进行恢复
ObjectOutputStream oosKey=new ObjectOutputStream(new FileOutputStream("key3.key"));
oosKey.writeObject(publicKey);//写入加密key
oosKey.close();
FileOutputStream oosDat=new FileOutputStream("dat3.dat");
oosDat.write(signed);//写入加密dat
oosDat.close();
}
privatestaticvoid verify()throws Exception{
Signature signature = Signature.getInstance("MD5WithRSA");
ObjectInputStream oisKey=new ObjectInputStream(new FileInputStream("key3.key"));
PublicKey publicKey=(PublicKey)oisKey.readObject();
oisKey.close();
signature.initVerify(publicKey);
signature.update("给你一百万,绝不反悔".getBytes());
FileInputStream fisDat=new FileInputStream("dat3.dat");
ByteArrayOutputStream baos=new ByteArrayOutputStream();
DataSign.copyStream(fisDat, baos);
byte[] deSecResult=baos.toByteArray();
boolean isYours=signature.verify(deSecResult);
System.out.println(isYours);
}
privatestaticvoid copyStream(InputStream is,OutputStream os) throws Exception{
byte[] buff=newbyte[1024];
inttotal=0;
int len=is.read(buff);
while(len!=-1){
os.write(buff, 0, len);
len=is.read(buff);
}
}
}
- Java安全(JCA/JSSE):数字签名
- Java安全(JCA/JSSE):对称加密
- Java安全(JCA/JSSE):数字证书与SSL
- Java安全(JCA/JSSE):Java加密框架(JCA)简要说明
- Java安全(JCA/JSSE):Java加密框架(JCA)简要说明
- Java安全(JCA(Java Cryptography Architecture)/JSSE(Java Secure Socket Extension)):基本知识
- Java安全(JCA/JSSE):非对称加密和数字摘要
- Java安全体系(JCA)分析
- java 安全 JCA
- java 安全 JCA 之二
- java 安全 JCA 之三
- JSSE(Java SecuritySocket Extension,Java安全套接字扩展)
- 【Java安全技术探索之路系列:Java可扩展安全架构】之二:JCA(一):JCA架构介绍
- 【Java安全技术探索之路系列:Java可扩展安全架构】之三:JCA(二):JCA类和接口
- 【Java安全技术探索之路系列:Java可扩展安全架构】之四:JCA(三):JCA编程模型
- 【Java安全技术探索之路系列:Java可扩展安全架构】之十一:JSSE(一):JSSE架构介绍
- 【Java安全技术探索之路系列:Java可扩展安全架构】之十二:JSSE(二):JSSE类和接口
- 【Java安全技术探索之路系列:Java可扩展安全架构】之十三:JSSE(三):JSSE编程模型
- 自定义数字和字符串的转换函数
- 知乎日报客户端的模拟实现(进行时)
- C语言字节对齐
- 广义表的前世今生
- 文本框的blur与change事件触发顺序
- Java安全(JCA/JSSE):数字签名
- Android splash
- JVM如何使用如libsigar-amd64-linux.so
- 协议和委托
- Git:代码冲突常见解决方法
- iOS生命周期
- imageview放大缩小以及滑动翻页
- HTTP中Get与Post的区别
- JAVA 文件编译执行与虚拟机(JVM)简单介绍