SHA1即安全哈希算法(Secure Hash Algorithm),用于签名;RSA是目前最有影响力的公钥加密算法。
说到这就的提到公钥和私钥:公钥、私钥分居客户端和服务器端,分别用于加密和解密。同时,私钥还用于签名,公钥还用于验证签名。
下边是一个发送端的签名及对签名的加密,接收端的解密与验证签名的应用:
/*
* SHA1WithRSA:用SHA算法进行签名,用RSA算法进行加密
* 发送端的签名及对签名的加密,接收端的解密与验证签名
*/
package test1;
import java.security.InvalidKeyException;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.NoSuchAlgorithmException;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.Signature;
import java.security.SignatureException;
public class RSA_Demo {
RSA_Demo()
{
init();
}
private void init()
{
prepare();
doSenderWork();
doReceiverWork();
}
//share by sender and receiver
Signature sign=null;
//belong to sender,it visible to sender and receiver
PublicKey publicKey=null;
//belong to sender,it is only visible to sender
PrivateKey privateKey;
private void prepare()
{
KeyPairGenerator keyGen=null;
try {
//实例化一个RSA算法的公钥/私钥对生成器
keyGen=KeyPairGenerator.getInstance("RSA");
} catch (NoSuchAlgorithmException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
int keysize=1024;
//设置公钥/私钥对的长度
keyGen.initialize(keysize);
//生成一个RSA算法的公钥/私钥
KeyPair keyPair=keyGen.generateKeyPair();
privateKey=keyPair.getPrivate();
publicKey=keyPair.getPublic();
try {
//实例化一个用SHA算法进行散列,用RSA算法进行加密的Signature.
sign=Signature.getInstance("SHA1WithRSA");
} catch (NoSuchAlgorithmException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
void doSenderWork()
{
String words="This is robin.How are you?";
Message msg=new Message(words.getBytes());
try {
//设置加密散列码用的私钥
sign.initSign(privateKey);
} catch (InvalidKeyException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
//设置散列算法的输入
sign.update(msg.getBody());
} catch (SignatureException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
byte data[]=null;
try {
//进行散列,对产生的散列码进行加密并返回
data=sign.sign();
} catch (SignatureException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//把加密后散列(即签名)加到消息中
msg.setSignature(data);
//发送消息
sendMsg(msg);
}
Message sendingMsg;
void sendMsg(Message sendMsg)
{
sendingMsg=sendMsg;
System.out.println("sending Message");
}
void doReceiverWork()
{
//收到消息
Message msg=getReceivedMsg();
try {
//设置解密散列码用的公钥。
sign.initVerify(publicKey);
} catch (InvalidKeyException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
try {
//设置散列算法的输入
sign.update(msg.getBody());
} catch (SignatureException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
/*进行散列计算,比较计算所得散列码是否和解密的散列码是否一致。
* 一致则验证成功,否则失败
*/
if(sign.verify(msg.getSignature()))
{
System.out.println("数字签名验证成功!");
}
else
{
System.out.println("数字签名验证失败!");
}
} catch (SignatureException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
Message getReceivedMsg()
{
System.out.println("receiving Message");
return sendingMsg;
}
}
class Message
{
private byte [] body;
private byte [] signature;
Message(byte data[])
{
body=data;
}
byte[] getBody()
{
return body;
}
byte[] getSignature()
{
return signature;
}
void setSignature(byte data[])
{
signature=data;
}
- 浏览: 585549 次
- 性别:
- 来自: 上海
最新评论
-
hhybtczit:
请问这样做的意义何在?
spring-jdbc文件数据库配置加密 -
di1984HIT:
学习了哦!!!
ORA-28000: the account is locked的解决办法 -
王庆波-行:
学习了,感谢分享
ORA-01017 invalid username/password;logon denied (密码丢失解决方案) -
ron.luo:
哥们,给了思路,赞一个。
spring-jdbc文件数据库配置加密 -
chinahuyong:
学习了。
public static boolean isVa ...
日期字符串解析--SimpleDateFormat严格限制日期转换setLenient(false)
相关推荐
ANDROID SDK接入的华为c++验证算法 sha1withrsa算法 华为sha256withrsa算法
SHA256加密
支付宝验名验证函数可参考此代码。 SHA1withRsa的各种操作:加密解密,加签验签。 C#源码可编译。签名调用方法:SHA1WithRSA.sign(str, key, "UTF-8");
支付宝签名,SHA256WithRsa签名,SHA1WithRSA签名, delph所有源码,有需要的朋友绝对值这个分数!
delphi RSA签名与验签】支持三种方式签名与验签(SHA1WithRSA、SHA256WithRSA和MD5WithRSA),秘钥格式支持PKCS8和PKCS1,支持两种字符集选择(UTF-8和GBK),D7~XE10可用
SHA256withRSA java常用的json加签验签工具类 SHA256withRSA 完美工具类 RSAUtils,包含: 1、签名 2、验签 3、公钥加密》私钥解密 4、私钥加密》公钥解密
C#实现字符串SHA-256加密算法工程下载,VS2013工程,使用系统带的加密库, using System.Security.Cryptography;
SHA1WithRSA:用SHA算法进行签名,用RSA算法进行加密
java实现的sha256加密算法
主要介绍了Javascript实现的SHA-256加密算法,以完整实例形式分析了JavaScript实现SHA-256加密的具体步骤与相关技巧,需要的朋友可以参考下
使用Openssl实现RSA的加密和解密过程;使用Openssl实现签名和验签过程;SHA256WithRSA签名验签过程;封装很好,一看就懂,直接使用!
支付宝rsa签名验签工具,包含使用说明和源码实现 1、双击脚本文件 “RSA签名验签工具.bat” 即运行RSA签名验签工具。... RSA签名方式使用算法:SHA1withRSA。 3、签名验签工具不要放在文件路径名存在空格的文件夹下。
SHA1算法的Delphi版,及其测试程序源码 算法从网上收集,但经过俺的排版优化
Vue-常用加密(MD5,DES,SHA256,BASE64,SHA1,RSA)
RSA的私钥格式为:PKCS#8 RSA的填充方式为:PKCS1Padding 加密算法:SHA256WithRSA
之前上传的那个有问题,会报错-9809, 经排查,发现代码写得有问题,请大家下载这个的。那个删除不了。真抱歉。
该文件是一个非常强大密码工具箱,里面包含了众多加密算法,可以直接在界面进行运行出加密结果。...MDC2、MDC2WITHRSA、SHA1、SHA224 、SHA256、SHA384、SHA 对称加密算法:AES、DES、RC4、WAKE等 非对称加密算法:RSA
android_platform_key生成的签名文件system_signature.keystore
图1 主要功能通过测试正确计算出hash值,成功生成并导出RSA密钥,并对文件进行签名,导出签名图2 验证签名功能通过测试成功读取RSA密钥,文件hash值正确