使用 XML 私钥解密 RSA

德米特里·乌什克维奇

我从 m 团队获得了一个 xml 格式的私钥。我想解密他们发送给我的消息(在应用程序中)。

XML:

在此处输入图片说明

我决定仅从代码中读取模块和D,因为我已经读完了足以解码。当我运行此代码时,我遇到一个错误:java.lang.ArrayIndexOutOfBoundsException:RSA块的数据过多

怎么了 ?

static String decrypt(String s) throws Exception
{
    String modulus =  "0xp1ux1gDERsUyGUpl+UZB/MK2TgZCDENQaM2cDsqiluTnW9jtTScLTrgyBhsCNVjDB7ZnJnWpMMdfFeJkxWSFEjFoKlJAqzs9VmHheLql+hUZavxY3q2x9whXc/IpXIvGXlWYzaLAuHEwbpSY8C0b93elkw1zN4GI3h19Yj+1WVgfPvpmweADocllZEIi26oBHNlcDlBGM/PE+YgownWbBCtr8kzaiZz9TUHjnbNEr8BkK/dKkv9BICBTF98A6c7gf/kiI0mqLAm5l3Eq8PL26kmjju5Bsa5ja4WywTT7CgFHBzlU/OzbHsiQYSKPVrFw7YyXfyZHy4qvtDXA7afQ==";
    String dD =  "hYkHUAWU7C2cGDn1vghX5b33eLum9a+EbcZm8peHHVx32knATslxFLpc/+VL5g9z3eoNJRDZMAI0r6au16sSKUyp1WNu8w2R/v/OSNq8DlnPwbyAE4diOJn6o3J7DXWSNRp/qdXfbF0eZHrKty0vq15iRZKFwptcLKwTYGSk/iZO951XuI1/hHr45fIxhz6QPBSMF5iWYShhI4zESYqjseytpzlk83npMnI4qghLVk6aQIls5AjWaD8oei4wNJ1S30U3rfQ2mnZrhbMi25G2be9nK/Gt+7/OKPNDsqh00VmKVn4v97Uy8cHZ4+zCQ5C5WtCtamhqmPrbeh7F8LzQQQ==";

    byte[] modBytes = decodeBase64(modulus.trim());
    byte[] dBytes = decodeBase64(dD);

    BigInteger modules = new BigInteger(1, modBytes);
    BigInteger d = new BigInteger(1, dBytes);

    KeyFactory factory = KeyFactory.getInstance("RSA");
    Cipher cipher = Cipher.getInstance("RSA");

    RSAPrivateKeySpec privSpec = new RSAPrivateKeySpec(modules, d);
    PrivateKey privKey = factory.generatePrivate(privSpec);
    cipher.init(Cipher.DECRYPT_MODE, privKey);
    byte[] decrypted = cipher.doFinal(s.getBytes());      
    return new String(decrypted);
}

将base64转成字节的方法

 private static byte[] decodeBase64(String dataToDecode)
{
    byte[] dataDecoded = Base64.decode(dataToDecode, Base64.DEFAULT);
    return dataDecoded;
}

更新 1:错误列表

错误发生在 byte[] 解密 = cipher.doFinal(s.getBytes());

W/System.err: java.lang.ArrayIndexOutOfBoundsException: too much data for RSA block
W/System.err:     at com.android.org.bouncycastle.jcajce.provider.asymmetric.rsa.CipherSpi.engineDoFinal(CipherSpi.java:459)
W/System.err:     at javax.crypto.Cipher.doFinal(Cipher.java:1502)
W/System.err:     at com.divofmod.cryprography.MainActivity.decrypt(MainActivity.java:114)
W/System.err:     at com.divofmod.cryprography.MainActivity.onCreate(MainActivity.java:72)
W/System.err:     at android.app.Activity.performCreate(Activity.java:6309)
W/System.err:     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1113)
W/System.err:     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2519)
W/System.err:     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2654)
W/System.err:     at android.app.ActivityThread.access$900(ActivityThread.java:175)
W/System.err:     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1488)
W/System.err:     at android.os.Handler.dispatchMessage(Handler.java:111)
W/System.err:     at android.os.Looper.loop(Looper.java:207)
W/System.err:     at android.app.ActivityThread.main(ActivityThread.java:5728)
W/System.err:     at java.lang.reflect.Method.invoke(Native Method)
W/System.err:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789)
W/System.err:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:679)
德米特里·乌什克维奇

最终版本

private String byte[] decodeBase64(String dataToDecode)
{
    byte[] dataDecoded = Base64.decode(dataToDecode, Base64.DEFAULT);
    return dataDecoded;
}
public static void decrypt(String s) throws Exception
{

    String modulus = "your modulus here";
    String dD = "your D here"; 

    byte[] modBytes = decodeBase64(modulus.trim());
    byte[] dBytes = decodeBase64(dD.trim());

    BigInteger modules = new BigInteger(1, modBytes);
    BigInteger d = new BigInteger(1, dBytes);

    KeyFactory factory = KeyFactory.getInstance("RSA");
    Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");

    RSAPrivateKeySpec privSpec = new RSAPrivateKeySpec(modules, d);
    PrivateKey privKey = factory.generatePrivate(privSpec);
    cipher.init(Cipher.DECRYPT_MODE, privKey);
    byte[] decrypted = cipher.doFinal(decodeBase64(s));
    return new String(decrypted);
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用部分私钥对RSA消息进行解密?

来自分类Dev

RSA解密C ++的私钥

来自分类Dev

RSA私钥解密,使用弹性城堡提供“ InvalidCipherTextException”

来自分类Dev

尝试使用私钥解密消息时,node-rsa错误

来自分类Dev

使用Java解密OpenSSL PEM编码的RSA私钥?

来自分类Dev

RSA私钥无法解密数据

来自分类Dev

如何在C#RSA中使用私钥加密和使用公钥解密

来自分类Dev

如何使用PyCrypto读取标准的openssl rsa私钥并对其进行解密

来自分类Dev

无法使用.Net Core中的RSA私钥解密连接字符串

来自分类Dev

使用私钥进行Python解密

来自分类Dev

RSACryptoServiceProvider仅使用私钥解密

来自分类Dev

使用Java的RSA加密/解密

来自分类Dev

c(加密消息)如何通过RSA中的私钥解密?

来自分类Dev

无法使用Scala解密OpenSSL生成的私钥

来自分类Dev

尝试使用密码解密安全的私钥

来自分类Dev

如何使用OpenSSL解密加密的私钥?

来自分类Dev

使用文件中的私钥进行RSA签名

来自分类Dev

使用rsa私钥对数据签名

来自分类Dev

使用OpenSSL生成RSA公钥/私钥?

来自分类Dev

使用rsa私钥对数据签名

来自分类Dev

Java中的RSA解密,未使用RSA库

来自分类Dev

使用RSA的Visa测试卡解密错误

来自分类Dev

减少使用Python进行RSA解密的时间

来自分类Dev

在pycrypto中使用RSA解密大文件?

来自分类Dev

无法使用Java进行RSA解密

来自分类Dev

无法使用开放SSL解密RSA数据

来自分类Dev

使用RSA解密时出现BadPaddingException

来自分类Dev

使用RSA解密字符串

来自分类Dev

使用OpenSSL rsa密钥解密时出错