我试图循环一个字节数组并将其解码为一个字符串,使用RSA加密,加密工作与数组,但我试图通过加密字符串的每个单词,使其可用于更长的数据,但当我这样做时,我得到所需的错误String []找到String Java。
// Decrypt the cipher text using the private key.
inputStream = new ObjectInputStream(new FileInputStream(PRIVATE_KEY_FILE));
final PrivateKey privateKey = (PrivateKey) inputStream.readObject();
String[][] decryptedText = new String[cipherText.length][];
for (int i = 0; i < cipherText.length; i++) {
**ERROR ON THIS LINE - required String[] found String Java**
decryptedText[i] = decrypt(cipherText[i], privateKey);
}
解密方法
public static String decrypt(byte[] text, PrivateKey key) {
byte[] dectyptedText = null;
try {
// get an RSA cipher object and print the provider
final Cipher cipher = Cipher.getInstance(ALGORITHM);
// decrypt the text using the private key
cipher.init(Cipher.DECRYPT_MODE, key);
dectyptedText = cipher.doFinal(text);
} catch (InvalidKeyException | NoSuchAlgorithmException | BadPaddingException |IllegalBlockSizeException | NoSuchPaddingException ex) {
}
return new String(dectyptedText);
}
加密方法
public static byte[] encrypt(String text, PublicKey key) {
byte[] cipherText = null;
try {
// get an RSA cipher object and print the provider
final Cipher cipher = Cipher.getInstance(ALGORITHM);
// encrypt the plain text using the public key
cipher.init(Cipher.ENCRYPT_MODE, key);
cipherText = cipher.doFinal(text.getBytes());
} catch (InvalidKeyException | NoSuchAlgorithmException | BadPaddingException | IllegalBlockSizeException | NoSuchPaddingException e) {
}
return cipherText;
}
答案 0 :(得分:1)
问题是你的decryptedText
是一个二维数组
String[][] decryptedText = new String[cipherText.length][];
所以这一行
decryptedText[i] = decrypt(cipherText[i], privateKey);
必须将数组放到decryptedText
。您可以更改decryptedText
的声明以解决此问题
String[] decryptedText = new String[cipherText.length];
希望这有帮助。
答案 1 :(得分:0)
decryptedText
被声明为
String[][] decryptedText
因此它是一个字符串数组的数组。
因此,decryptedText[i]
是此数组数组中的第i个元素。因此它是一系列字符串。并尝试使用返回值decrypt()
初始化它,它不返回字符串数组,而是返回String。因此错误。
我不明白为什么你有一个2D数组,而不仅仅是一个字符串数组。