Java开发网 |
注册 |
登录 |
帮助 |
搜索 |
排行榜 |
发帖统计
|
您没有登录 |
» Java开发网 » Java Security
打印话题 寄给朋友 订阅主题 |
作者 | 自己手写的加密签名段子异常,请高手指点 |
Deo2005
发贴: 2 积分: 0 |
于 2005-11-20 20:59
该程序段应用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 |
已读帖子 新的帖子 被删除的帖子 |
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 |