Java RSA解密

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java RSA解密相关的知识,希望对你有一定的参考价值。

之前在EXT 页面中做了数据加密,如图

截图中的加密数据为C535AD4F2E753F29CE1118EDB8B7913FB96C145FC21A1E9BA991F35512B8562F571AC62BD6CCEC1024F7FF2E7675B9D3D20FC13B14B43DBCBFDF798F905F5926E2BCCCA7D3D952A2B215AE7D41F626882107BD871A3BE6D285FA4937026FA9FA0C53E6B8CE1117EC0DD7F224ED487EB9BC8AE9560E975ADB9082F7F524F0D6F5
现在需要通过Java程序模拟 字符串 “admin” 根据截图中的方式进行加密。
各位大神有好的办法吗?
说的简单点就是用已知的密钥对现有字符串进行加密,各位大神有解决的办法吗?

根据已知的公钥m与e生成PublicKey,然后加密,需要用到bouncycastle这个库,大致代码如下:

// 生成m与e
byte[] 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

参考技术A 5MD 或者UUID 都很实用啊

望采纳 (个人建议)

以上是关于Java RSA解密的主要内容,如果未能解决你的问题,请参考以下文章

java rsa私钥加密

RSA OAEP、Golang 加密、Java 解密 -BadPaddingException:解密错误

java RSA加解密以及用途

怎么在ios进行rsa公钥加密,java做rsa私钥解密

java,rsa加解密在本地正常,部署到tomcat上加解密后出现乱码。

RSA 加解密(Java 实现)