RSA解密时javax.crypto.BadPaddingException: Data must start with zero
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了RSA解密时javax.crypto.BadPaddingException: Data must start with zero,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3990字,纯文字阅读大概需要6分钟。
内容图文
![RSA解密时javax.crypto.BadPaddingException: Data must start with zero](/upload/InfoBanner/zyjiaocheng/846/cfe0f1071ba546d99f9f58b132e2b5c6.jpg)
然后再根据空格分隔转换回byte数组。如果不加标识符,由于byte值可能是一位到三位,无法知道某一个byte是在哪里结束。当然也可以在转成string时补0。或者转成16进制固定为两位长。
code:
public?class?RSATest?{
???public?static?void?main(String[]?args)?{
???????try?{
???????????RSATest?encrypt?=?new?RSATest();
???????????KeyPairGenerator?keyPairGen?=?KeyPairGenerator.getInstance("RSA");
???????????keyPairGen.initialize(1024);
???????????KeyPair?keyPair?=?keyPairGen.generateKeyPair();
???????????RSAPrivateKey?privateKey?=?(RSAPrivateKey)?keyPair.getPrivate();
???????????RSAPublicKey?publicKey?=?(RSAPublicKey)?keyPair.getPublic();
???????????String?str?=?"Hello?World!";
???????????System.out.println("String?will?be?encrypted:?"?+?str);
???????????byte[]?e?=?encrypt.encrypt(publicKey,?str.getBytes());
???????????String?tmp1?=?encrypt.bytesToString(e);
???????????System.out
???????????????????.println("encrypted?String's?bytes,?use
bytesToString()?method?convert?bytes?to?string:??"?+?tmp1);
???????????String[]?strArr?=?tmp1.split("?");
???????????int?len?=?strArr.length;
???????????byte[]?clone?=?new?byte[len];
???????????for?(int?i?=?0;?i?<?len;?i++)?{
???????????????clone[i]?=?Byte.parseByte(strArr[i]);
???????????}
???????????System.out.println("convert?to?String,?then?back?to?bytes
again:?"?+?encrypt.bytesToString(clone));
???????????byte[]?d?=?encrypt.decrypt(privateKey,?clone);
???????????System.out.println("decrypted?String's?bytes,?use
bytesToString()?method?convert?bytes?to?string:"
???????????????????+?encrypt.bytesToString(d));
???????????System.out.println("construct?a?string?by?decrypted
string's?bytes:?"?+?new?String(d));
???????}?catch?(Exception?e)?{
???????????e.printStackTrace();
???????}
???}
???protected?String?bytesToString(byte[]?encrytpByte)?{
???????String?result?=?"";
???????for?(Byte?bytes?:?encrytpByte)?{
???????????result?+=?bytes.toString()?+?"?";
???????}
???????return?result;
???}
???protected?byte[]?encrypt(RSAPublicKey?publicKey,?byte[]?obj)?{
???????if?(publicKey?!=?null)?{
???????????try?{
???????????????Cipher?cipher?=?Cipher.getInstance("RSA");
???????????????cipher.init(Cipher.ENCRYPT_MODE,?publicKey);
???????????????return?cipher.doFinal(obj);
???????????}?catch?(Exception?e)?{
???????????????e.printStackTrace();
???????????}
???????}
???????return?null;
???}
???protected?byte[]?decrypt(RSAPrivateKey?privateKey,?byte[]?obj)?{
???????if?(privateKey?!=?null)?{
???????????try?{
???????????????Cipher?cipher?=?Cipher.getInstance("RSA");
???????????????cipher.init(Cipher.DECRYPT_MODE,?privateKey);
???????????????return?cipher.doFinal(obj);
???????????}?catch?(Exception?e)?{
???????????????e.printStackTrace();
???????????}
???????}
???????return?null;
???}
}
运行结果:
String?will?be?encrypted:?Hello?World!
encrypted?String's?bytes,?use?bytesToString()?method?convert?bytes?to
string:??79?62?-105?-47?-61?45?64?-11?-8?-120?30?31?37?-111?49?-30?88
-12?93?-77?3?39?-13?-18?68?-104?0?30?85?26?104?15?-126?-39?12?110?-84
68?-43?73?35?121?-20?-69?-84?85?-33?-123?-48?-68?-85?-106?41?-84?20
-17?87?-81?42?-67?-87?122?-2?37?74?27?103?112?58?-125?-87?-32?96?-56
65?-2?-103?-28?70?107?2?28?87?75?-8?-62?54?12?-7?-108?-123?120?-63?-83
13?-89?-21?58?-51?-84?66?25?103?-114?-14?110?80?58?74?95?-57?-73?-78
-46?56?-83?-72?-38?2?43?25?12?56?12?101?15?91?-37
convert?to?String,?then?back?to?bytes?again:?79?62?-105?-47?-61?45?64
-11?-8?-120?30?31?37?-111?49?-30?88?-12?93?-77?3?39?-13?-18?68?-104?0
30?85?26?104?15?-126?-39?12?110?-84?68?-43?73?35?121?-20?-69?-84?85
-33?-123?-48?-68?-85?-106?41?-84?20?-17?87?-81?42?-67?-87?122?-2?37?74
27?103?112?58?-125?-87?-32?96?-56?65?-2?-103?-28?70?107?2?28?87?75?-8
-62?54?12?-7?-108?-123?120?-63?-83?13?-89?-21?58?-51?-84?66?25?103
-114?-14?110?80?58?74?95?-57?-73?-78?-46?56?-83?-72?-38?2?43?25?12?56
12?101?15?91?-37
decrypted?String's?bytes,?use?bytesToString()?method?convert?bytes?to
string:72?101?108?108?111?32?87?111?114?108?100?33
construct?a?string?by?decrypted?string's?bytes:?Hello?World!
内容总结
以上是互联网集市为您收集整理的RSA解密时javax.crypto.BadPaddingException: Data must start with zero全部内容,希望文章能够帮你解决RSA解密时javax.crypto.BadPaddingException: Data must start with zero所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。