Java开发网 Java开发网
注册 | 登录 | 帮助 | 搜索 | 排行榜 | 发帖统计  

您没有登录

» Java开发网 » Java Security  

按打印兼容模式打印这个话题 打印话题    把这个话题寄给朋友 寄给朋友    该主题的所有更新都将Email到你的邮箱 订阅主题
flat modethreaded modego to previous topicgo to next topicgo to back
作者 自己手写的加密签名段子异常,请高手指点
Deo2005





发贴: 2
积分: 0
于 2005-11-20 20:59 user profilesend a private message to usersend email to Deo2005search all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
该程序段应用RSA算法,先生成两个密钥对,分别模拟发送方与接收方。首先应用发送方的私钥签名,再利用接收方的公钥加密,接下来进行测试,先利用接收方的私钥解密,再利用发送方的公钥验证签名。整个程序可以正常编译,但在进行到公钥加密部分出现javax.crypto.IllegalBlockSizeException异常,说待加密的数据过长。请高手指点一二,先谢。
//-------------------------------------------------------------------------------
import java.security.*;
import javax.crypto.Cipher;

public class ThreeSignature{
public static void main(String args[]) throws Exception{
byte[] theText = new String("Computer Security").getBytes("UTF8");

System.out.println("\nStart generating RSA key1...");
KeyPairGenerator keyGen1 = KeyPairGenerator.getInstance("RSA");
keyGen1.initialize(1024);
KeyPair key1 = keyGen1.generateKeyPair();
System.out.println("Finish generating RSA key1!");
System.out.println("The public key is:"+key1.getPublic().toString());
System.out.println("The private key is:"+key1.getPrivate().toString());
System.out.println("\nStart generating RSA key2...");
KeyPairGenerator keyGen2 = KeyPairGenerator.getInstance("RSA");
keyGen2.initialize(1024);
KeyPair key2 = keyGen2.generateKeyPair();
System.out.println("Finish generating RSA key2!");
System.out.println("The public key is:"+key2.getPublic().toString());
System.out.println("The private key is:"+key2.getPrivate().toString());
System.out.println();

Signature sig = Signature.getInstance("SHA1WithRSA");
sig.initSign(key1.getPrivate());
sig.update(theText);

byte[] signature = sig.sign();
System.out.println(sig.getProvider().getInfo());
System.out.println("\nSignature:");
System.out.println(new String(signature,"UTF8"));

Cipher cipher=Cipher.getInstance("RSA/ECB/PKCS1Padding");
System.out.println("\n"+cipher.getProvider().getInfo());
System.out.println("\nStart encryption");
cipher.init(Cipher.ENCRYPT_MODE,key2.getPublic());
byte[] cipherText=cipher.doFinal(signature);
System.out.println("Finish encryption");
System.out.println(new String(cipherText,"UTF8"));

System.out.println("\nStart decryption");
cipher.init(Cipher.DECRYPT_MODE,key2.getPrivate());
byte[] newsignature=cipher.doFinal(cipherText);
System.out.println("Finish decryption");
System.out.println(new String(newsignature,"UTF8"));

System.out.println("\nStart signatrure verification...");
sig.initVerify(key1.getPublic());
sig.update(theText);
try{
if(sig.verify(newsignature)){
System.out.println("Verify the signature successful!");
}
else
System.out.println("verify the signature failed!");
}catch(SignatureException e){System.out.println("Signature exception");}
}
}

ThreeSignature.java (2.38k)


Deo2005 edited on 2005-11-23 14:08


话题树型展开
人气 标题 作者 字数 发贴时间
7275 自己手写的加密签名段子异常,请高手指点 Deo2005 2626 2005-11-20 20:59

flat modethreaded modego to previous topicgo to next topicgo to back
  已读帖子
  新的帖子
  被删除的帖子
Jump to the top of page

   Powered by Jute Powerful Forum® Version Jute 1.5.6 Ent
Copyright © 2002-2021 Cjsdn Team. All Righits Reserved. 闽ICP备05005120号-1
客服电话 18559299278    客服信箱 714923@qq.com    客服QQ 714923