Java RSA解密
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java RSA解密相关的知识,希望对你有一定的参考价值。
之前在EXT 页面中做了数据加密,如图
截图中的加密数据为C535AD4F2E753F29CE1118EDB8B7913FB96C145FC21A1E9BA991F35512B8562F571AC62BD6CCEC1024F7FF2E7675B9D3D20FC13B14B43DBCBFDF798F905F5926E2BCCCA7D3D952A2B215AE7D41F626882107BD871A3BE6D285FA4937026FA9FA0C53E6B8CE1117EC0DD7F224ED487EB9BC8AE9560E975ADB9082F7F524F0D6F5
现在需要通过Java程序模拟 字符串 “admin” 根据截图中的方式进行加密。
各位大神有好的办法吗?
说的简单点就是用已知的密钥对现有字符串进行加密,各位大神有解决的办法吗?
根据已知的公钥m与e生成PublicKey,然后加密,需要用到bouncycastle这个库,大致代码如下:
// 生成m与ebyte[] mBytes = Hex.decode("C535AD4F...略");
BigInteger m = new BigInteger(1, mBytes);
BigInteger e = BigInteger.valueOf(0x10001);
// 恢复公钥
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
PublicKey publicKey = keyFactory.generatePublic(new RSAPublicKeySpec(m, e));
/* 根据经验,那个JS加密后的密文用Java解出来是反转的字符串,
* 所以如果想要达到与JS完全一致的效果的话,需要将明文先反转,
* 即将 "admin" 变成 "nimda"
*/
byte[] data = new StringBuilder("admin").reverse().toString().getBytes();
// 现在可以用publicKey加密了
Cipher cipher = Cipher.getInstance("RSA", new BouncyCastleProvider());
cipher.init(Cipher.ENCRYPT_MODE, publicKey);
byte[] enc = cipher.doFinal(data);
System.out.println(Hex.toHexString(enc));
理论上代码大概是这样。加密结果是:
0d42e0ab31391a536346a1a1af7696e21734ab6004b33f4ce1add778d0c3b8b93141cf0422ef3e086e41d0dcf96c9908e30dd9b993c1eea0d0a392f2ecf4347e5ed7d9b3451796ef04203248536ebca02120a9c3fa520f88ca43ec0df30d2210026ac98e0dcd460bd3bd38b4ddd30a5fe0a0c103a5bd02b2e7eb9ae3a2ddab68
追问您好 这个方法应该可以使用,因为得到的结果是正确的,但是您的代码我无法直接运行,缺少了一些类和方法,您能提供一下完整的代码吗?非常感谢!!!
是不是我的环境中缺少了什么jar包吗?
完整的代码如下:
import java.math.BigInteger;import java.security.KeyFactory;
import java.security.PublicKey;
import java.security.spec.RSAPublicKeySpec;
import javax.crypto.Cipher;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import org.bouncycastle.util.encoders.Hex;
public class RSAUtil
public static void main(String[] args) throws Exception
// 其他代码,百度说回答太长了不让贴
需要Java 1.4+,和一个第三方包BouncyCastle,传在附件里了,也可以在这里下载:www.bouncycastle.org/latest_releases.html
望采纳 (个人建议)
以上是关于Java RSA解密的主要内容,如果未能解决你的问题,请参考以下文章
RSA OAEP、Golang 加密、Java 解密 -BadPaddingException:解密错误