Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 用RSA私钥解密_Java_Android_Encryption - Fatal编程技术网

Java 用RSA私钥解密

Java 用RSA私钥解密,java,android,encryption,Java,Android,Encryption,所以我尝试使用RSA公钥和私钥对字符串进行加密/解密。它可以很好地进行加密,但每当我尝试解密加密字符串时,都会得到一个非常奇怪的输出。例如,“hello”解密为: �]t1��#Z�-�-P���ԏh2�5.�~��E'����波黑��~�-我�����T�K�>�����+ v���?NA��Y�[@���jp!2p�X@oZ$٥�@&�v���=�A.��E�A.�M��;@问题是,encodedBytes.toString()没有达到您期望的效果。您需要在Java SE 1.7兼容代码之前

所以我尝试使用RSA公钥和私钥对字符串进行加密/解密。它可以很好地进行加密,但每当我尝试解密加密字符串时,都会得到一个非常奇怪的输出。例如,“hello”解密为:

�]t1��#Z�-�-P���ԏh2�5.�~��E'����波黑��~�-我�����T�K�>�����+
v���?NA��Y�[@���jp!2p�X@oZ$٥�@&�v���=�A.��E�A.�M��;@问题是,
encodedBytes.toString()
没有达到您期望的效果。您需要在Java SE 1.7兼容代码之前执行
新字符串(encodedBytes,StandardCharsets.ASCII);
或者
新字符串(encodedBytes,Charset.forName(“ASCII”);


您应该始终指示填充模式;请使用例如
“RSA/None/PKCS1Padding”
而不是
“RSA”

您能以十六进制显示加密代码、算法字符串和结果吗?看起来您正在使用
“RSA/ECB/NoPadding”
这始终是不正确的算法字符串;填充模式是RSA加密/解密的一个重要部分。@owlstead OK Updated能否检查上述哪些函数在android上工作(对于您正在使用的特定版本)?添加任何类型的填充都会给我一个不同的错误。对于
PCKS1Padding
它会给我一个
…填充异常:…RSA\u padding\u check\u PKCS1\u type\u 2:块类型不是02
。另外
新字符串(encodedBytes,Charset.ForName(“ASCII”)
不起作用。如果您的公钥与私钥不匹配,也会发生这种情况……您可以通过比较两者的模来再次检查吗?哦,对字符串而不是字节数组执行
decodeBase64
(您能想象如果
getBytes()
返回UTF-16会发生什么情况吗?)是的,同样。这是一个简单的应用程序,我每次只生成一个新的密钥对,然后使用public加密,private解密。如果执行所有给定的提示,结果会是什么?
public String decryptString(PrivateKey key, String string) {
    try {

        pubDecryptCipher.init(Cipher.DECRYPT_MODE, key);
        byte[] decodedBytes = Base64.decodeBase64(string.getBytes());
        byte[] unencryptedByteArray = pubDecryptCipher.doFinal(decodedBytes);
        return new String(unencryptedByteArray, "UTF8");

    } catch (Exception e) {
        e.printStackTrace();
    }
    return null;
}
public String encryptString(PublicKey key, String string) {
    try {
        pubEncryptCipher.init(Cipher.ENCRYPT_MODE, key);
        byte[] eba = pubEncryptCipher.doFinal(string.getBytes("UTF8"));
        byte[] encodedBytes = Base64.encodeBase64(eba);

        return encodedBytes.toString();

    } catch (InvalidKeyException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IllegalBlockSizeException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (BadPaddingException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (UnsupportedEncodingException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();

    }
    return null;
}
efbfbdefbfbdefbfbdc78d2defbfbd6e2fefbfbdefbfbdefbfbd50efbfbd73efbfbd6defbfbd31efbfbd40117defbfbdefbfbd2cefbfbd576ed39c2aefbfbd41533defbfbdefbfbd1a167c23efbfbdd0a11a3213355eefbfbdefbfbdefbfbd6145efbfbd55efbfbdefbfbd7d09efbfbd700814efbfbdefbfbd687b225eefbfbd3c00efbfbdefbfbd3509efbfbd6c5eefbfbdefbfbd79efbfbdefbfbd033d77efbfbd71efbfbd57efbfbd7e76d6a101efbfbd4aefbfbd4a0540efbfbdefbfbd297f6fefbfbd73efbfbdefbfbdefbfbd010defbfbdefbfbdefbfbd00efbfbd490706efbfbdefbfbdefbfbd322435efbfbd02efbfbdefbfbd1dd79477efbfbd13efbfbdd5bb57efbfbdefbfbd0aefbfbd39404b53efbfbdefbfbd06165aefbfbd32efbfbdefbfbd4665efbfbddd9d6aefbfbd0842efbfbdefbfbd7c35efbfbdefbfbdefbfbd3e7eefbfbdefbfbd11efbfbd1fc7b839efbfbd44efbfbdefbfbd1aefbfbd3a314ac48eefbfbd7cefbfbd77efbfbd097449efbfbdcaa8351aefbfbdefbfbd5befbfbdefbfbd655a62efbfbd3651efbfbdefbfbd41efbfbd64efbfbd1150efbfbd65efbfbd224720060cefbfbd11efbfbdefbfbdefbfbdefbfbd0defbfbd1439efbfbdefbfbd
pubEncryptCipher = Cipher.getInstance("RSA");
pubDecryptCipher = Cipher.getInstance("RSA");