给定相同的明文和公钥是否可以生成2个相同的RSA密文?

时间:2017-03-02 02:04:50

标签: android encryption rsa key-pair

我正在玩Android上的RSA,我意识到RSA加密会产生不同的密文,因为填充有明文和公钥相同,是否有办法在给定相同的明文和公钥的情况下生成相同的密文?

同样,给定相同的明文和私钥的运行之间的数字签名是否不同,是否有办法生成相同的数字签名?

这是我的keygen:

        KeyStore keyStore = KeyStore.getInstance("AndroidKeyStore");
        keyStore.load(null);
        KeyStore.PrivateKeyEntry entry = (KeyStore.PrivateKeyEntry) keyStore.getEntry(mAlias, null);
        Cipher cip = null;

        RSAPublicKey pubKey = (RSAPublicKey)entry.getCertificate().getPublicKey();
        cip = Cipher.getInstance("RSA/ECB/PKCS1Padding");
        cip.init(Cipher.ENCRYPT_MODE, pubKey);

        byte[] encryptBytes = cip.doFinal(challenge.getBytes());

以下是我加密的方式:

char x[] = "hello";
char *y = "world";
    *y = x[1];
printf("%s", y);

感谢。

1 个答案:

答案 0 :(得分:1)

要始终生成相同的密文,请使用不带填充的算法。将RSA/ECB/PKCS1Padding替换为RSA/ECB/NoPadding

但是,出于安全原因,我建议使用带填充的算法,如果可能的话,使用OAEP RSA/ECB/OAEPWithSHA-1AndMGF1Padding(可从Android 23获得)。填充不应该是解密端的问题

对于相同的私钥和要签名的数据,PCKS#1数字签名将产生相同的结果