Я пытался зашифровать сообщение с помощью RSA, вот мой код:RSA шифрования (модуль/показатель) дает «сообщение больше, чем модуль»
byte[] message = new byte[] { (byte) 0xbe, (byte) 0xef, (byte) 0xef };
Cipher cipher = Cipher.getInstance("RSA");
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
String mod = "B390F7412F2554387597814A25BC11BFFD95DB2D1456F1B66CDF52BCC1D20C7FF24F3CCE7B2D66E143213F64247454782A377C79C74477A28AF6C317BE68BC6E8FF001D375F9363B5A7161C2DFBC2ED0850697A54421552C6288996AC61AF5A9F7DE218ABBC75A145F891266615EB81D11A22B7260F7608083B373BA4BC0756B";
String exp = "010001";
RSAPublicKeySpec pubKeySpec = new RSAPublicKeySpec(new BigInteger(Hex.fromString(mod)), new BigInteger(Hex.fromString(exp)));
RSAPublicKey pubKey = (RSAPublicKey) keyFactory.generatePublic(pubKeySpec);
cipher.init(Cipher.ENCRYPT_MODE, pubKey);
byte[] cipherText = cipher.doFinal(message);
System.out.println("cipher: " + new String(cipherText));
Я всегда получаю ошибку:
javax.crypto.BadPaddingException: Message is larger than modulus
at sun.security.rsa.RSACore.parseMsg(Unknown Source)
at sun.security.rsa.RSACore.crypt(Unknown Source)
at sun.security.rsa.RSACore.rsa(Unknown Source)
at com.sun.crypto.provider.RSACipher.doFinal(RSACipher.java:352)
at com.sun.crypto.provider.RSACipher.engineDoFinal(RSACipher.java:382)
at javax.crypto.Cipher.doFinal(Cipher.java:2087)
Я также пробовал с BouncyCastle
, но я все еще получаю ту же ошибку.
Примечание: Hex.fromString
возвращает byte array
данного Hex String
.
И сообщение только 3 bytes
Спасибо
Кажется ваше сообщение больше, что Whan ваш RSA ожидает. Например, шифрование с использованием 1024-битного ключа RSA может шифровать только до 117 байтов. [Расшифровка «длинных» сообщений с помощью RSA Encryption] (http://stackoverflow.com/questions/2653591/decrypting-long-message-encrypted-with-rsa-java) – gtgaxiola
, но в моем случае мое сообщение составляет всего 3 байта. 'byte [] message = new byte [] {(byte) 0xbe, (byte) 0xef, (byte) 0xef};' –
что такое Hex.fromString? Это Base64 Encoded? – gtgaxiola