社区
其它技术问题
帖子详情
SHA1WithRSA算法是怎么一回事?
liwei960067495
2011-10-10 11:06:41
百度谷歌都找不到相关的概念。。。。。
...全文
1912
1
打赏
收藏
SHA1WithRSA算法是怎么一回事?
百度谷歌都找不到相关的概念。。。。。
复制链接
扫一扫
分享
举报
写回复
配置赞助广告
用AI写文章
1 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
hanlin10728
2012-02-09
打赏
举报
回复
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;
}
}
DELPHI实现标准
SHA1
With
RSA
、MD5With
RSA
算法
工作中遇到这样一个问题,双方通过HTTPS通信,对方提供了密钥及签名验签接口,是JAVA写的,由于某些限制,我只能用客户端与之通信,所以先用Swing写了一个,但实际运行时发现占用资源较大,便计划用DELPHI实现,于是问题来了,在网上翻了个底朝天,没找到现成的方法,这个是最接近的了(http://www.cnblogs.com/midea0978/articles/768824.html),可是它提供的DLL也没调用成功,只好自己实现。首先我很弱的认为,
SHA1
With
RSA
就是先做
SHA1
摘要再做
RSA
Python使用
SHA1
with
Rsa
算法
实现签名
Python使用
SHA1
with
Rsa
算法
实现签名 代码 biz_content = {"amount": int(money) * 100, "pay_type": "KJ-UY", "merType": "1", "tradeName": "充值{}&quo
sha1
with
rsa
算法
转载自西门打扫雪的博客、别人眼中的过客的博客 浅谈加密与签名 我们一般的加密主要分2种。对称加密。非对称加密。顾名思义。对称加密就是秘钥是一样的。通过同一个秘钥加密解密。这一类的加密
算法
有DES,3DES,AES等。而非对称加密即使用公钥和秘钥2个。公钥进行加密,而私钥进行解密。这一类的加密
算法
主要
RSA
数字签名并不是加密。他只是将传递的参数进行签名。服务器端可以验签。主要作用有2个:1.保证数...
java中数字签名MD5with
RSA
和
SHA1
with
RSA
加密
算法
一、简介 数字签名用于验证消息发送者的身份,确保其他人无法伪造身份。 二、原理 数字签名基于非对称加密
算法
,利用只有拥有者才有私钥的特性(这可以标识身份)进行的。 1、数字签名的生成 对发送内容先生成有限长度的摘要,再使用私钥进行加密,进而生成数字签名。 2、数字签名验证 用公钥对数字签名进行解密获取加密内容(其实也就是摘要),再用与发送方相同的摘要
算法
对发送内空生成摘要, 再将这两者进...
PHP MD5with
RSA
、
SHA1
with
RSA
、SHA256with
RSA
算法
签名
MD5with
RSA
签名 签名: openssl_sign($data, $signature, $pkeyid,OPENSSL_ALGO_MD5 ); 验签: openssl_verify($data, $signature, $pkeyid, OPENSSL_ALGO_MD5); 代码如下: <?php class Md5
RSA
{ /** * 利用约定数据和私钥生成数字签名 * @param $params 待签数据 * @return String 返回
其它技术问题
3,881
社区成员
9,044
社区内容
发帖
与我相关
我的任务
其它技术问题
C/C++ 其它技术问题
复制链接
扫一扫
分享
社区描述
C/C++ 其它技术问题
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章