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;
}
- 浏览: 589579 次
- 性别:
- 来自: 上海
最新评论
-
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接入中,使用SHA256withRSA算法可能是为了遵循最新的安全标准和提升用户的信任度。开发者在接入华为SDK时,需要确保使用正确的签名方法,并按照华为提供的指南完成签名过程,以确保应用能够顺利...
SHA256withRSA-Delphi7.rar是一个与Delphi 7编程环境相关的压缩包,主要涉及SHA256加密算法以及RSA公钥密码系统。SHA256是一种广泛使用的安全散列函数,用于生成固定长度(256位)的摘要,常用于数据完整性校验和...
`SHA1withRSA`是一种结合了SHA-1哈希算法和RSA公钥加密算法的安全技术,常用于数字签名和数据完整性验证。这篇内容将深入探讨`SHA1withRSA`在C#中的实现以及其在支付宝验名验证中的应用。 首先,`SHA-1`(Secure ...
本文将深入探讨C#中使用SHA1withRSA算法进行签名和加解密的封装类及其应用场景,特别是针对支付宝等在线支付平台的验名验证。 SHA1withRSA是一种结合了SHA1哈希算法和RSA公钥密码体制的数字签名方法。SHA1负责生成...
此压缩包文件包含的是与支付宝签名相关的Delphi源码,主要涉及到SHA256WithRsa和SHA1WithRSA两种签名算法。 SHA(Secure Hash Algorithm)是一种哈希函数,可以将任意长度的消息转化为固定长度的摘要。SHA256是SHA...
RSA的私钥格式为:PKCS#8 RSA的填充方式为:PKCS1Padding 加密算法:SHA256WithRSA
SHA1withRSA是一种常用的数字签名算法,结合了SHA1哈希函数和RSA公钥加密算法,用于验证数据的完整性和来源。本篇文章将深入探讨C#中如何使用SHA1withRSA进行加密、解密、签名和验证签名的操作。 首先,我们需要...
delphi RSA签名与验签】支持三种方式签名与验签(SHA1WithRSA、SHA256WithRSA和MD5WithRSA),秘钥格式支持PKCS8和PKCS1,支持两种字符集选择(UTF-8和GBK),D7~XE10可用
在Java编程环境中,SHA256withRSA是一种广泛使用的安全算法,它结合了SHA-256哈希函数和RSA非对称加密算法,用于确保数据的完整性和身份验证。这个"JAVA-SHA256withRSA.java"文件提供了一个完整的工具类RSAUtils,...
然而,由于它们各自的加密库和签名机制的差异,可能会遇到一些挑战,比如在使用SHA256withRSA算法进行签名和验证时的问题。本文将详细阐述如何解决Java和.NET之间基于SHA256withRSA的签名和验签问题。 首先,我们...
【delphi支付宝支付SDK】自己根据api文档封装的SDK,支持条码支付、扫码支付、交易查询、交易退款、退款查询、交易撤销、交易关闭、交易结算、账户转账、转账查询、对账单下载、SHA1WithRSA(RSA)和SHA256WithRSA(RSA...
在Linux环境下,C语言通过OpenSSL库实现SHA1WithRSA签名和验证是常见的加密操作,主要涉及以下几个核心知识点: 1. **OpenSSL库**:OpenSSL是一个强大的安全套接字层密码库,包含各种主要的密码算法、常用的密钥和...
本文将详细讨论C#编程语言中实现字符串SHA-256加密算法的相关知识点。 SHA-256(Secure Hash Algorithm 256位)是一种广泛使用的密码散列函数,它能将任意长度的输入(或预映射)转换为固定长度的输出,通常是256位...
RSA是一种广泛使用的非对称加密算法,而SHA1WithRSA则是结合了SHA-1哈希函数和RSA公钥密码体制的一种签名方法。这个名为"RSA_Demo.rar_DEMO_RSA签名_SHA1WithRSA_SHA1withRSA java_rsa_demo"的压缩包文件很显然提供...
SHA256withRSA是其中一种常见的数字签名算法,它结合了SHA256哈希函数和RSA公钥加密算法,提供了强大的安全保障。在这个场景中,我们将深入探讨如何使用C#编程语言来实现SHA256withRSA的签名生成、验证、密钥对的...
在C++中实现SHA1算法涉及到对输入数据进行一系列复杂的数学和位操作,以生成唯一的固定长度摘要。下面我们将深入探讨SHA1算法的计算原理以及如何在C++中实现它。 首先,SHA1算法的计算流程主要包括初始化、处理消息...
JSRSAASign是一个JavaScript库,专门用于处理RSA加密和数字签名,包括SHA256withRSA算法。这个"SHA256withRSA.rar"压缩包包含的相关知识点主要围绕以下几个方面: 1. **数字签名**:数字签名是一种非对称加密技术的...
在计算机网络和信息安全领域,SHA-256加密算法是一种广泛使用的哈希函数。它属于SHA-2(安全哈希算法2)家族,能够生成一个固定长度(256位)的哈希值,常用于数据完整性校验、数字签名、区块链等场景。本篇文章将...
这是一种常见的加密方法,它结合了非对称加密的RSA算法与哈希函数SHA256,增强了数据的安全性。 首先,我们需要了解PFX文件。PFX,也称为PKCS#12,是一种标准格式,用于存储用户的证书和私钥,通常用于网络通信中的...
SHA-256则是SHA-2(安全哈希算法2)家族的一员,由美国国家安全局设计,用于数字签名和哈希函数,具有较高的安全性。 在Spring框架中,我们经常需要处理加密解密和签名验证的问题,以确保数据传输的安全性和完整性...