Благодарим вас за то, что вы нашли время, чтобы помочь мне в этом!(AES Encryption) Недостатки кода, с чем мне следует быть осторожным? [Предоставлено кодом] [Java]
Сообщения редактировали МЕНЬШЕ ИНФОРМАЦИЮ СМОТРИТЕ Отредактированную ЧАСТЬ
Ну я проводить наши исследования по этому вопросу, и я закончил с рабочим куском коды ..
Но Шифрование это не место для ошибок, и я хотел спросить, действительно ли мой код безопасен! Это очень важно для меня, потому что я хочу, чтобы реализовать его в программу, чтобы мой код ...
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.Base64;
import javax.crypto.*;
import javax.crypto.spec.SecretKeySpec;
import java.security.SecureRandom;
public class EncryptFile{
private static final String FILE_IN = "./EncryptFile.java";
private static final String FILE_ENCR = "./EncryptFile_encr.java";
private static final String FILE_DECR = "./EncryptFile_decr.java";
public static void main(String []args){
try
{
Encryption("passwordisnottheactual", Files.readAllBytes(Paths.get(FILE_IN)));
Decryption("passwordisnottheactual");
}catch(Exception e){
System.out.println(e.getMessage());
}
}
private static void Encryption(String Key, byte[] byteArray) throws Exception
{
// Decode the base64 encoded Key
byte[] decodedKey = Base64.getDecoder().decode(Key);
// Rebuild the key using SecretKeySpec
SecretKey secretKey = new SecretKeySpec(decodedKey, 0, decodedKey.length, "AES");
// Cipher gets AES Algorithm instance
Cipher AesCipher = Cipher.getInstance("AES");
//Initialize AesCipher with Encryption Mode, Our Key and A ?SecureRandom?
AesCipher.init(Cipher.ENCRYPT_MODE, secretKey, new SecureRandom());
byte[] byteCipherText = AesCipher.doFinal(byteArray);
//Write Bytes To File
Files.write(Paths.get(FILE_ENCR), byteCipherText);
}
private static void Decryption(String Key) throws Exception
{
//Ddecode the base64 encoded string
byte[] decodedKey = Base64.getDecoder().decode(Key);
//Rebuild key using SecretKeySpec
SecretKey secretKey = new SecretKeySpec(decodedKey, 0, decodedKey.length, "AES");
//Read All The Bytes From The File
byte[] cipherText = Files.readAllBytes(Paths.get(FILE_ENCR));
//Cipher gets AES Algorithm Instance
Cipher AesCipher = Cipher.getInstance("AES");
//Initialize it in Decrypt mode, with our Key, and a ?SecureRandom?
AesCipher.init(Cipher.DECRYPT_MODE, secretKey, new SecureRandom());
byte[] bytePlainText = AesCipher.doFinal(cipherText);
Files.write(Paths.get(FILE_DECR), bytePlainText);
}
}
EDIT
Возможный дубликат Простой Java AES шифрования/дешифрования пример - JFPicard
Ну это может быть, но эти ответы Используйте IVParameterSpec, и я хотел бы знать, если эта строка кода на самом деле безопасно или если это плохая практика:
AesCipher.init(Cipher.DECRYPT_MODE, secretKey, new SecureRandom());
потому что я использую new SecureRandom()
каждый раз, , и я не видел, чтобы кто использовать объект SecureRandom как это.
Лучше попробуйте http://codereview.stackexchange.com/, так как SO, вероятно, не рассмотрит ваш код. –
Возможный дубликат [Простой пример AES для шифрования/расшифровки Java] (http://stackoverflow.com/questions/15554296/simple-java-aes-encrypt-decrypt-example) – JFPicard