当前位置: 首页 > 知识库问答 >
问题:

用RSA java解密Base64加密字符串后的垃圾值

丁理
2023-03-14

在我的android应用程序中,我正在实现RSA加密解密。

我们有这个适用于ios和android的应用程序。

每当ios用我的公钥加密消息时,都会在base64中发送加密文本,在android端,我会用私钥解密。

问题是,每当我解密数据时,它就会产生被垃圾填充包围的加密消息

如下所示:

K������N�t�十、�08���我�二、�z�

“test updated pub key”是消息。

        public static String RSADecrypt(final String result, Context context, PrivateKey key)
        throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, IllegalBlockSizeException,
        BadPaddingException, InvalidKeySpecException
{
    Log.d(TAG, "Decryption of " + result);
    String decrypted = "";
    try
    {
        byte[] b = Base64.decode(result, Base64.DEFAULT);
        Cipher cipher1;
        cipher1 = Cipher.getInstance(ALGO);
        cipher1.init(Cipher.DECRYPT_MODE, key);
        byte[] decryptedBytes = cipher1.doFinal(b);
        decrypted = new String(decryptedBytes,"US-ASCII");
        Log.d(TAG, "Decrypted text " + decrypted);
        Toast.makeText(context, decrypted, Toast.LENGTH_LONG).show();;
    }
    catch (Exception e)
    {
        e.printStackTrace();
        Log.d(TAG, "Exception in decryption");
    }
    return decrypted;

}

我不明白问题出在哪里,在iOs端,在android端,或者在解密后将字节转换为字符串。Plz帮助

共有1个答案

姚星宇
2023-03-14

尝试使用“RSA/ECB/PKCS1Padding”而不是“RSA/ECB/NoPadding”或类似的值作为算法的值。周围的随机字符实际上是随机填充字节。填充是RSA加密不可分割的一部分,不应跳过。

请注意,密钥生成器仍应使用“RSA”,生成器与加密模式和/或填充模式无关。

 类似资料:
  • 所以我有一个AES-256-ecb base64字符串,我用在线工具解码了它。然而,我更喜欢命令行,所以我尝试使用命令行来解码它。 这是我尝试过的,但我得到了严重的解密错误 是加密的base64文本 -aes-256-ecb是加密密码 而366a74cb3c959de17d61db30591c39d1是关键 结果应该是另一个base64字符串:

  • 我正在尝试通过使用本文中描述的步骤来加密/解密一些数据get-a-illegalblock size异常数据必须不超过256字节。我应该怎么做很清楚,但即使我做错了什么。 这是我的课: 我尝试过这个方法,因为我认为问题在于AES使用的填充1,但我错了<运行了一段时间后,我得到了一些结果: [ENCRYPT]之前的数据: 之后的数据: 键之前: 之后的关键: [解密]密钥之前: 之后的关键: 之前的

  • 问题内容: 我是密码学的新手。我希望学习如何在文件中加密和解密文本……当我在net中引用相关文章时。我怀疑对同一文本进行多次加密后,单个文本的加密文本是否会相同?谁能解决我的疑问? 问题答案: 这是使用该类的示例:

  • 我感兴趣的是构建一个个人使用的小应用程序,它将使用JavaScript在客户端加密和解密信息。加密的信息将存储在服务器上的数据库中,但不会存储解密的版本。 它不一定要是超级duper安全的,但我想使用一个当前未中断的算法。 理想情况下我可以做一些 生成编码字符串,以及类似于 以后再解码。 到目前为止,我已经看到了以下内容:http://bitwiseshiftleft.github.io/sjcl

  • 问题内容: 我正在尝试加密数据库中的一些文本,以便在程序启动期间进行加载和解密。 我尝试了几种方法,包括第三方库https://github.com/richard-lyman/lithcrypt无济于事。使用以下方法对8/10项进行加密/解密,但是似乎在加密/解密中的某些时候留下了一些填充残留。就目前而言,我的代码是这样的: 有人告诉我,我可能需要填充字符串,但是我不得不填充流密码似乎很奇怪。

  • 问题内容: 我在PHP中有一个函数,可按如下所示加密文本: 如何在Python中解密这些值? 问题答案: 要解密这种加密形式,您将需要获得Rijndael版本。在这里可以找到一个。然后,您将需要模拟PHP Mcrypt模块中使用的键和文本填充。它们增加了填充文本和键的正确大小。他们使用的是256位块大小,并且您提供的密钥使用的密钥大小为128(如果您提供更大的密钥,则密钥大小可能会增加)。不幸的是