久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

SHA1WithRSA算法-簡(jiǎn)介

 jl_oracle 2012-04-10
 
SHA1即安全哈希算法(Secure Hash Algorithm),,用于簽名,;RSA是目前最有影響力的公鑰加密算法,。
說到這就的提到公鑰和私鑰:公鑰,、私鑰分居客戶端和服務(wù)器端,分別用于加密和解密,。同時(shí),,私鑰還用于簽名,公鑰還用于驗(yàn)證簽名,。
下邊是一個(gè)發(fā)送端的簽名及對(duì)簽名的加密,,接收端的解密與驗(yàn)證簽名的應(yīng)用:
/*
* SHA1WithRSA:用SHA算法進(jìn)行簽名,用RSA算法進(jìn)行加密
* 發(fā)送端的簽名及對(duì)簽名的加密,,接收端的解密與驗(yàn)證簽名
*/
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 {
//實(shí)例化一個(gè)RSA算法的公鑰/私鑰對(duì)生成器
keyGen=KeyPairGenerator.getInstance("RSA");
} catch (NoSuchAlgorithmException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
int keysize=1024;
//設(shè)置公鑰/私鑰對(duì)的長(zhǎng)度
keyGen.initialize(keysize);
//生成一個(gè)RSA算法的公鑰/私鑰
KeyPair keyPair=keyGen.generateKeyPair();
privateKey=keyPair.getPrivate();
publicKey=keyPair.getPublic();
try {
//實(shí)例化一個(gè)用SHA算法進(jìn)行散列,,用RSA算法進(jìn)行加密的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 {
//設(shè)置加密散列碼用的私鑰
sign.initSign(privateKey);
} catch (InvalidKeyException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
//設(shè)置散列算法的輸入
sign.update(msg.getBody());
} catch (SignatureException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
byte data[]=null;
try {
//進(jìn)行散列,對(duì)產(chǎn)生的散列碼進(jìn)行加密并返回
data=sign.sign();
} catch (SignatureException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//把加密后散列(即簽名)加到消息中
msg.setSignature(data);
//發(fā)送消息
sendMsg(msg);
}
Message sendingMsg;
void sendMsg(Message sendMsg)
{
sendingMsg=sendMsg;
System.out.println("sending Message");
}
void doReceiverWork()
{
//收到消息
Message msg=getReceivedMsg();
try {
//設(shè)置解密散列碼用的公鑰,。
sign.initVerify(publicKey);
} catch (InvalidKeyException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
try {
//設(shè)置散列算法的輸入
sign.update(msg.getBody());
} catch (SignatureException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
/*進(jìn)行散列計(jì)算,,比較計(jì)算所得散列碼是否和解密的散列碼是否一致。
* 一致則驗(yàn)證成功,,否則失敗
*/
if(sign.verify(msg.getSignature()))
{
System.out.println("數(shù)字簽名驗(yàn)證成功,!");
}
else
{
System.out.println("數(shù)字簽名驗(yàn)證失敗,!");
}
} 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;
}
}

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn),。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多