java使用Cipher 执行RSA解密报错

padding选取都是一样的,加密成功,解密失败,很奇怪。

#主要代码
public static byte[] rsa_encrypt(byte[] bArr, byte[] bArr2) {
try {
Key a = MyKey.getPublicKey(bArr2);
if(a == null)
System.out.println("get pub key error!");
Cipher instance = Cipher.getInstance("RSA/ECB/PKCS1Padding");
instance.init(Cipher.ENCRYPT_MODE, a);
return instance.doFinal(bArr);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}

public static byte[] rsa_decrypt(byte[] bArr, byte[] bArr2) {
    try {
        Key a = MyKey.getPrivateKey(bArr2);
        if(a == null)
            System.out.println("get pri key error!");

        Cipher instance = Cipher.getInstance("RSA/ECB/PKCS1Padding");
        instance.init(Cipher.DECRYPT_MODE, a);
        return instance.doFinal(bArr);
    } catch (Exception e) {
        e.printStackTrace();
        return null;
    }
}

#报错信息
javax.crypto.BadPaddingException: Decryption error
at sun.security.rsa.RSAPadding.unpadV15(Unknown Source)
at sun.security.rsa.RSAPadding.unpad(Unknown Source)
at com.sun.crypto.provider.RSACipher.doFinal(RSACipher.java:363)
at com.sun.crypto.provider.RSACipher.engineDoFinal(RSACipher.java:389)
at javax.crypto.Cipher.doFinal(Cipher.java:2164)
at qqpinyin.EncryptTool.rsa_decrypt(EncryptTool.java:134)
at qqpinyin.main.key_decrypt(main.java:80)
at qqpinyin.main.main(main.java:96)

2个回答

bArr 多大?加密 buffer 至少要和 public key-11 一樣大(比方 117), 解密buffer 至少要和 public key 同大(比方 128)。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
java Cipher加密、解密
/** * 解密算法 * @param str * @param pos1 * @param pos2 * @return */ static public String Decrypt(String str, int pos1, int pos2) { int nLength; String strReturn = ""; if(str==null)
RSA解密RSA解密
RSA解密RSA解密
RSA解密报错:该项不存在
//要解密的字符串rnstring text = "L9gKL7QyjiyWisM0YPiP2Kq9jSV7EQe7VNJNEKU3HJv4//HSBoiClrFM/PdD0Kj9j6keJe65ggEshW3vVoYq8fpLiL5omIBCGYIZxXrP5lK9TqtJRFxzjUykRa6MTAxTVTFe1zbIwwDtQiS29rBx+c3PGIk4Nt/wn/tAHzlhADE= ";rnrn//获取证书的公钥rnstring aa = DataCertificate.GetCertificateFromStore("CN=tnt, CN=com, CN=cn, O=TNT Express, L=Shanghai, C=CN").PublicKey.Key.ToXmlString(false);rnrn RSACryptoServiceProvider provider = new RSACryptoServiceProvider();rn provider.FromXmlString(aa);rn byte[] rgb = Convert.FromBase64String(text);rn [color=#FF0000]byte[] bytes = provider.Decrypt(rgb, false);//这里报错,该项不存在[/color]rn string result = new UnicodeEncoding().GetString(bytes);rnrnrn请问是什么原因导致报错的.
关于rsa解密.总是报错.
public string jieme(string sEncrypted)rn rn int iMaxLength = 117;//一次加密的最大字节数rn int iKeyLength = 3096;rn byte[] decryptedData;//解密后的数据rn string str = "";rnrn tryrn rn RSACryptoServiceProvider RSA = new RSACryptoServiceProvider(iKeyLength);rn int iDecryptLength = (iKeyLength / 1024) * 172; //每次需要解密的字节数rn int iDecrypt = sEncrypted.Trim().Length/iDecryptLength; //解密次数rn string sDecrypted = ""; //解密后的字符串rn int iByte = (iDecrypt + 1) * iMaxLength;rn byte[] bDecrypted = new Byte[iByte]; //解密后的字节信息rn for (int i = 0; i < iDecrypt + 1; i++)rn rn string sToDecrypted = "";rn //把待解密的字符串分段rn if (i == iDecrypt)rn rn sToDecrypted = sEncrypted.Substring(i * iDecryptLength, sEncrypted.Length - i * iDecryptLength);rn rn elsern rn sToDecrypted = sEncrypted.Substring(i * iDecryptLength, iDecryptLength);rn rnrn if (sToDecrypted != null && sToDecrypted != "")rn rn byte[] bToDecrypt = Convert.FromBase64String(sToDecrypted); //得到待解密的字节信息rn decryptedData =RSA.Decrypt(bToDecrypt, false);//解密rn System.Buffer.BlockCopy(decryptedData, 0, bDecrypted, i * iMaxLength, decryptedData.Length);//得到解密后的字节信息rn rn sDecrypted += System.Text.Encoding.Default.GetString(bDecrypted); //得到解密后的字符串rn rn rn str += "Decrypted buff: " + sDecrypted + '\n';rn return sDecrypted;rn rn catch (Exception e1)rn rn throw e1;rn rnrn
RSA使用js加密,使用java解密
    RSA算法使用javascript加密,使用java解密,提供完整代码及例子下载。     javascript加密介绍参见另一篇:javascript使用RSA加密提交数据。本篇的例子使用的js是上一篇中提到的第2个版本。          本篇是服务端解密部分,并且提供可运行的包括js的全部示例代码。     由于sun虚拟机自带的RSA解密填充模式使用的都是特殊的PADD...
java RSA加密 解密
java RSA加密解密
java RSA 加密 解密
java RSA加密解密 该工具类中用到了BASE64,需要借助第三方类库:javabase64-1.3.1.jar注意:RSA加密明文最大长度117字节,解密要求密文最大长度为128字节,所以在加密和解密的过程中需要分块进行。RSA加密对明文的长度是有限制的,如果加密数据过大会抛出如下异常: Exception in thread &quot;main&quot; javax.crypto.Ille...
关于java的RSA解密
将一个int数据转化为byte数组,使用java自带的RSA加密(公钥)得到128字节的字节数组,然后使用私钥解密成功。rn但是如果随便将一个128字节即1024位的字节数组使用RSA1024位私钥解密,结果却出错,这是为什么?有人知道吗?rn报错: javax.crypto.BadPaddingException: Data must start with zero
java RSA解密
上传文件为C++ RSA加密文件,传到服务端,需要用JAVA RSA解密。rnrn现在遇到的问题是如何将C++ RSA密钥转换为JAVA RSA密钥。rnrn
RSA and AES cipher based on JCE
JAVA RSA&AES implementation based on JCE
JAVA加密工具类Cipher 使用方法
该类位于javax.crypto包下,声明为 public class Cipher extends Object 此类为加密和解密提供密码功能。它构成了 Java Cryptographic Extension (JCE) 框架的核心。 为创建 Cipher 对象,应用程序调用 Cipher 的 getInstance 方法并将所请求转换 的名称传递给它。还可以指定提供者的名称(可选)。
RSA加密与RSA解密
采用快速幂算法以及扩展欧几里得算法实现RSA的加密与解密。
RSA和Vigenere Cipher加解密算法
两个加解密算法程序,VS2010下测试通过!
vue 使用 RSA加密 + java 后端 RSA解密
1: 使用支付宝 rsa 密钥生成工具 ,生成密钥,地址如下:  https://opensupport.alipay.com/support/knowledge/20069/201602048385?ant_source=zsearch   2:这是下载工具后的目录: 点击 RSA 签名验签工具.bat   3: https://docs.open.alipay.com/291/1...
Js RSA 加密、解密,Java RSA 加密、解密
总体思路:前端用公钥加密,后端用私钥解密 rsa.html 展示了js进行加密、解密的过程 RSAUtil.java 是一个java类,后端用到的RSA加解密工具类,里面包含了一个main方法,可以允许进行测试 一般范式 1、前端请求后端生成RSA公钥信息; 2、后台端可以利用RSAUtil.java生成的RSA信息,将私钥自己存起来,将公钥返回给前端 3、前端拿到公钥,进...
javascript rsa加密/java使用Cipher.getInstance("RSA/ECB/PKCS1Padding")解密
1)服务器端获得生成密钥对;rn2)javascript使用公钥加密;rn3)java获得密文使用私钥解密;rn现在尝试网络上的javascript代码不稳定,即10次有3次不能解密;rnhttp://www-cs-students.stanford.edu/~tjw/jsbn/rsa.html
RSA解密
通过本系统,可以解决传统的依赖Excel、word等办公软件来处理大量的项目和成果数据的方式。过去采用传统的手工办法,难以及时有效的掌握新的科研情况,而且每次查询统计工作量浩大,通过本系统,所有的查询统计可以很方便的得到,并导出到excel中。各级领导不但可以对所承接的各类项目及取得的成果一目了然,也能对未来的发展具有一定的预测。
rsa 解密
[code=C#]protected void Button1_Click(object sender, EventArgs e)rn rn using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider()) rn // 公钥 rn string pubkey = rsa.ToXmlString(false); rn txtPublic.Text = pubkey; rn // 私钥 rn string prikey = rsa.ToXmlString(true); rn txtPrivate.Text = prikey; rn rn /// rn /// 加密rn /// rn /// rn /// rn protected void Button2_Click(object sender, EventArgs e)rn rn string prikey = txtPrivate.Text; rn using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider()) rn rsa.FromXmlString(prikey); // 加密对象 rn RSAPKCS1SignatureFormatter f = new RSAPKCS1SignatureFormatter(rsa); rn f.SetHashAlgorithm("SHA1"); rn byte[] source = System.Text.ASCIIEncoding.ASCII.GetBytes(sUserName.Text); rn SHA1Managed sha = new SHA1Managed(); rn byte[] result = sha.ComputeHash(source); rn byte[] b = f.CreateSignature(result);rn sCode.Text = Convert.ToBase64String(b);rn rn rn /// rn /// 验证注册码rn /// rn /// rn /// rn protected void Button3_Click(object sender, EventArgs e)rn rn string pubkey = txtPublic.Text; rn using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider()) rn rsa.FromXmlString(pubkey); rn RSAPKCS1SignatureDeformatter f = new RSAPKCS1SignatureDeformatter(rsa); rn f.SetHashAlgorithm("SHA1"); rn byte[] key = Convert.FromBase64String(cCode.Text); rn SHA1Managed sha = new SHA1Managed(); rn byte[] name = sha.ComputeHash(ASCIIEncoding.ASCII.GetBytes(cUserName.Text)); rn if (f.VerifySignature(name, key)) rn msg.Text = "验证成功"; rn else msg.Text = "不成功"; rn rn rn [/code]
java RSA非对称加密-解密(简洁明了)
上篇文章:RSA非对称加密证书的生成(简洁明了) Java非对称加密证书生成看我的上篇文章,下边主要是Java的解密部分,利用证书pkcs8_private_key.der(即:RSA非对称加密证书的生成(简洁明了)生成Java支持的PKCS8二进制类型的私钥)获取私钥再进行密文的解密。 下边是主要的代码: package home; import javax.crypto.BadPa...
RSA加密与解密(Java实现)
RSA的应用 RSA是一种非对称加密算法。现在,很多登陆表单的密码的都采用RSA加密,例如京东中的登陆使用公钥对密码进行加密。 Base64编码 apache.commons-codex包提供了许多编码格式转换,例如Base64。 以下为Base64编码表 使用apache.commons-codex进行Base64对字符串进行编码与解码的程序如下: package com.qian.encod...
Node.js 使用RSA加密/解密
node-rsa 标签(空格分隔): 未分类 第一次使用,不喜勿喷。有什么好的建议请联系博主邮箱 15517072173@163.com 详细内容请查看node-rsa官方文档 纯粹的JavaScript 不需要OpenSSL 生成密钥 支持加密/解密的长消息 签署和验证 Example var NodeRSA = require('node-rsa');...
RSA,JS加密java解密
很简单,一看就懂,用不明白可以留言,看到必回!如果加密中文js里加密之前encodeURIComponent编码一下,java用java.net.URLDecoder.decode(outputStr, "UTF-8");解码
Java Cipher
Java Cipher 加密和解密工具 附带源码 Java Cipher 加密和解密工具 附带源码 Java Cipher 加密和解密工具 附带源码 Java Cipher 加密和解密工具 附带源码
Cipher类_Java加密与解密的艺术
在最近的项目中发现了Cipher这个类,楼主结合百度与api写了个小例子发现,jdk还提供了加密与解密的功能,Cipher类为加密和解密提供密码功能。它构成了Java Cryptographic Extension(JCE)框架的核心。这些核心操作需要通过Cipher类来实现。废话不说我们看代码示例: package spider.com.yxt.utils; import javax.cry
仿射密码解密(Affine Cipher)
仿射密码是一种表单代换密码,字母表的每个字母相应的值使用一个简单的数学函数对应一个数值,再把对应数值转换成字母。 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 ...
急! Cipher cipher = Cipher.getInstance("RSA");为什么提示找不到RSA算法?
Cipher cipher = Cipher.getInstance("RSA");rn或rnCipher cipher=Cipher.getInstance("RSA/ECB/PKCS1Padding");rn都报错:rnjava.security.NoSuchAlgorithmException: Cannot find any provider supporting RSArn
利用Cipher实现rsa的效率问题
小弟最近在处理一个rsa加密的问题,采用的是jdk自带的类库:rnjavax.crypto.Cipher,rnrn公钥和密钥的生成使用的是:rnjava.security.KeyPairGenerator,rnjava.security.Key,rnjava.security.KeyPair,rnrn在获得cipher时候采用的provider是rnorg.bouncycastle.jce.provider.BouncyCastleProvider,rnrn加密的这段代码看起来很简单:rnpublic static byte[] decrypt(Key key, byte[] raw) throws IllegalBlockSizeException, BadPaddingException, IOException, InvalidKeyException,rn NoSuchAlgorithmException, NoSuchPaddingExceptionrn rn Cipher cipher = Cipher.getInstance("RSA", new org.bouncycastle.jce.provider.BouncyCastleProvider());rn cipher.init(Cipher.DECRYPT_MODE, key);rnrn int blockSize = cipher.getBlockSize();rn ByteArrayOutputStream bout = new ByteArrayOutputStream(64);rnrn for (int j = 0; raw.length - j * blockSize > 0; j++)rn rn bout.write(cipher.doFinal(raw, j * blockSize, blockSize));rn rn return bout.toByteArray();rn rn,rnkey_size=2048rn这样实现,确实可以对数据分块加密,但效率很底,加密一个大小为1K的文件,需要2秒多的时间,有点令人难以接受,不知道这里是否有人和我有同样的经历。我想提高下效率,不知道有什么可用的方法,希望能得到大家的指点,谢谢!rn
RSA加密与解密毕业论文
关于文本加密与解密的毕业论文,RSA加密解密技术论文
Base64/RSA 加密、解密
Base64/RSA 加密、解密工具类,简单耐用,居家旅行必备之物
RSA加密与解密
采用RSA算法进行文件加密与解密,随机产生秘钥
WAS支持RSA公钥解密
需要将 -Dcom.ibm.crypto.provider.DoRSATypeChecking=false  false改为true   详见:http://www-01.ibm.com/support/docview.wss?uid=swg1IV18625   APAR status Closed as program error.   Error des...
ios RSA 加密 解密
1.参考链接https://www.jianshu.com/p/43f7fc8d8e14
RSA公钥解密
rsa公钥解密
RSA解密java加密串
//RSA解密java加密串         public string decrypt1(string encryptedData)         {             IAsymmetricBlockCipher cipher = new RsaEngine();             byte[] encryptData = Convert.FromBase64String
Python实现RSA加密,解密
import math import random #生成素数数组 def prime_array(): arraya = [] for i in range(2,100): #生成前100中的素数,从2开始因为2是最小的素数 x = prime(i,2) #i为素数时返回True,则将x加入arraya数组中;2为测试值 if x: ...
RSA加密和解密
如前面《RSA算法原理》里描述,RSA算法的加解密操作本质上来讲就是大数的模幂运算,RSA算法的安全性很大程度上取决于填充方式,因此在一个安全的RSA加密操作需要选择一个合适的填充模式,最常见的加密填充模式有RSA_PKCS_V15和RSA_PKCS_V21(OAEP),下面还是以mbedtls里的RSA加密源码为例做进一步分析。 一、RSA加密 /* * Add the message ...
crrypto++ RSA 解密失败
我用java生成的RSA私钥,公钥,并用公钥加密的密文。rn使用c++和crrypto++来解密。rn测试一:成功rn用crrypto++库,利用java生成公钥加密字符串,再立即用私钥解密。成功。rn测试二:rn用crrypto++库,利用java生成的私钥对java加密的密文进行解密,失败。rnrn请问可能是什么原因?rn我怀疑是密文的格式不符合要求,我得到的密文是二进制的,我将其转化为16进制字符(0x12->'1' '2'),是不是错了?rnrn代码如下(参考https://my.oschina.net/u/566591/blog/168520写的):rnint lenText = MyRsaReadFile("F:\\encryptedTxt__HexStr", mMyRsaInbufText);rnchar* inText = (char*)malloc(lenText);rnmemcpy(inText, mMyRsaInbufText, lenText);rnstring str = (char *)inText;rnstring decrypted = rsa.Decrypt("F:\\prvkey_HexStr.pem", str.c_str());rnfree(inText);rn其中,encryptedTxt__HexStr和prvkey_HexStr.pem都是16进制字符文件。rnprvkey_HexStr.pem应该OK(测试一证明).
怎么解密rsa密文
.net有封装好的方法可以直接解密么rn解密普通文件和解密rsa签名有什么区别rnrnrn[code=csharp]rnrn /// rn /// RSA解密rn /// rn /// 私钥rn /// 待解密的数据rn /// 解密后的结果rn public string RSADecrypt(string xmlPrivateKey, string m_strDecryptString)rn rn string str2;rn tryrn rn RSACryptoServiceProvider provider = new RSACryptoServiceProvider();rn provider.FromXmlString(xmlPrivateKey);rn byte[] rgb = Convert.FromBase64String(m_strDecryptString);rn byte[] buffer2 = provider.Decrypt(rgb, false);rn str2 = new UnicodeEncoding().GetString(buffer2);rn rn catch (Exception exception)rn rn throw exception;rn rn return str2;rn rn[/code]rnprovider.FromXmlString(xmlPrivateKey);每次运行到这一句总是跑出异常,说是“行 1 上有无效语法。”这是怎么回事。rn要是这个方法不好,那有什么号的方法解密吗rnxmlPrivateKey 网上说这个要写到xml文件里,不能直接字符串引用,具体怎么操作呢
用公钥解密RSA
公钥:11234d300d06092a864886f70d010101050003818b0030818702818100a3dc132169d3a3f0a3df4f7014d7c741ff6da7322b82d70f3ecdce16fac6349c8dfc63b1061fa11f8285d9afe6aa4f7ce01f645c9e0db3361d9ff9f165d23591f1f5e57833df4dcbd6ce7582208e8021d41a534ff0b5a5ed90d2642c51532668e3c90696c26c43b52cd4ec733c57b2fa4ca9ba03b606153e0aac01f9d1c3e523123243rn签名:rn4b3ef029516193b7d969ac1840083635a3e0901b8cd526caa44c1a072f496d7f0d4bca3942c0d9030bede37c7809b835cec787eb39e18b7596a724fba9805b24714dfbb0f4a3fb430b32e075254a114d4c38a0ac52ef46a0ad33dec3fbfc15417402a1399e65e46996c0cf49fc7ffca9222f8cd693c8376b6f928828967bec42rn请问如何恢复签名以前的内容:rn
RSA 公钥加密-私钥解密
RSA 公钥加密-私钥解密 博客地址 http://www.cnblogs.com/zyw-205520/p/5585043.html
相关热词 c++和c#哪个就业率高 c# 批量动态创建控件 c# 模块和程序集的区别 c# gmap 截图 c# 验证码图片生成类 c# 再次尝试 连接失败 c#开发编写规范 c# 压缩图片好麻烦 c#计算数组中的平均值 c#获取路由参数