0

AES暗号化を試しています。ただし、次のコードから書いたエラーが発生します。

private static byte[] readKey(String request) throws KeyFileNotFoundException,
 UnsupportedEncodingException, UnknownKeyException {

    File keyFile = new File(Logging.getCurrentDir() + "\\cikey.key");
    Properties keys = new Properties();
    byte[] storage;

    if (!keyFile.exists())
        throw new KeyFileNotFoundException("Key file not located.");

    if (keys.containsKey(request) == false)
        throw new UnknownKeyException("Key not found."); //I RECIEVE THIS ERROR

    storage = keys.getProperty(request).getBytes(); //read the STRING value and turn into a byte array

    return storage;
}

これは、メソッド呼び出しのコードですreadKey()。メソッドを介して読み込まれたバイト配列をメソッドにコピーする際にも問題があります。詳細な説明については、メソッドのコメントをお読みください。readKey()decrypt()

public static String decrypt(String in) throws NoSuchAlgorithmException,
  NoSuchPaddingException, InvalidKeyException, InvalidAlgorithmParameterException,
  IllegalBlockSizeException, BadPaddingException, IOException,
  KeyFileNotFoundException, UnknownKeyException {

    String out = " "; //decrypted String to return

    byte[] key = readKey("key").clone(); //my attempt to copy a byte array
    SecretKeySpec skeySpec = new SecretKeySpec(key, "AES");

    byte iv[] = readKey("iv"); //works here? same as above so I don't know.
    IvParameterSpec ivspec = new IvParameterSpec(iv);

    //initialize the cipher for decryption
    Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
    cipher.init(Cipher.DECRYPT_MODE, skeySpec, ivspec);

    // decrypt the message
    byte[] decrypted = cipher.doFinal(in.getBytes());

    out = asHex(decrypted);

    return out;
}

この問題を解決するためのアイデアはありますか?

4

3 に答える 3

3

System.arrayCopy()配列をコピーするために使用する必要があります。

編集

別のオプションは使用することですが、それはボンネットの下でArrays.copyOf()使用するだけです。System.arrayCopy()

于 2013-08-29T16:18:08.040 に答える
2

キーをチェックする前に、keysいずれかの方法を使用して変数をロードする必要があります。Properties.load

さらにSystem.arraycopy、clone メソッドまたはArrays.copyOfRange

于 2013-08-29T16:36:04.067 に答える