2017-10-07 2 views
-2

Bonjour j'ai besoin de l'algorithme AES pour les fichiers de données pas de chaîne et je ne sais pas comment modifier ce code ..... Je veux public static String encrypt obtenir le passage et l'itinéraire du fichier et remplacer le crypté fichier avec le fichier d'originerendre cet algorithme AES pour le fichier pas la chaîne

public class AES { 
    private static SecretKeySpec secretKey; 
    private static byte[] key; 

    public static void setKey(String myKey) 
    { 
     MessageDigest sha = null; 
     try { 
      key = myKey.getBytes("UTF-8"); 
      sha = MessageDigest.getInstance("SHA-1"); 
      key = sha.digest(key); 
      key = Arrays.copyOf(key, 16); 
      secretKey = new SecretKeySpec(key, "AES"); 
     } 
     catch (NoSuchAlgorithmException e) { 
      e.printStackTrace(); 
     } 
     catch (UnsupportedEncodingException e) { 
      e.printStackTrace(); 
     } 
    } 

    public static String encrypt(String strToEncrypt, String secret) 
    { 
     try 
     { 
      setKey(secret); 
      Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding"); 
      cipher.init(Cipher.ENCRYPT_MODE, secretKey); 
      return Base64.getEncoder().encodeToString(cipher.doFinal(strToEncrypt.getBytes("UTF-8"))); 
     } 
     catch (Exception e) 
     { 
      System.out.println("Error while encrypting: " + e.toString()); 
     } 
     return null; 
    } 

    public static String decrypt(String strToDecrypt, String secret) 
    { 
     try 
     { 
      setKey(secret); 
      Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5PADDING"); 
      cipher.init(Cipher.DECRYPT_MODE, secretKey); 
      return new String(cipher.doFinal(Base64.getDecoder().decode(strToDecrypt))); 
     } 
     catch (Exception e) 
     { 
      System.out.println("Error while decrypting: " + e.toString()); 
     } 
     return null; 
    } 
} 
+2

Vous devriez jeter un oeil à [demander] – pvg

Répondre

0

quelques observations:

  1. setKey est public, mais vous l'utiliser comme private. Ne définissez pas la touche encrypt, en la laissant à l'appelant (mon option préférée) ou en la faisant private, en la modifiant comme une sorte de fonction d'assistance.
  2. encrypt obtient un String seulement pour le transformer en un byte[] (en utilisant getBytes()), et de toute façon vous voulez crypter des fichiers, qui sont généralement appelés octets, et non pas des chaînes (pas tous les fichiers sont textuels). Il devrait obtenir et retourner byte[], IMO. Si vous voulez traiter le fichier comme textuel, ignorez celui-ci.
  3. Vous voulez que encrypt fasse quelque chose qu'il ne devrait pas faire. Comme nommé, il devrait seulement chiffrer. Ne le faites pas utiliser des fichiers, etc

Donc, ma suggestion est, créer une nouvelle méthode encryptFile.
Utilisez Files.readAllBytes (ou lisez this sur la lecture de fichiers texte). Utilisez le encrypt pour chiffrer les données.
Utilisez Files.write pour réécrire dans le fichier.

+0

d'abord merci beaucoup pour votre aide vous voulez dire "public static byte [] encrypt (octet [] strToEncrypt.getBytes(), String secret)"? alors qu'en est-il de cette ligne: "return Base64.getEncoder(). EncodeToString (cipher.doFinal (strToEncrypt.getBytes (" UTF-8 ")));" ? –

+0

N ° 'public static byte [] encrypt (octet [] toEncrypt, String secret)'. Comme pour l'instruction return, vous devriez juste '.encode' (pas' encodeToString') et vous ne devriez pas utiliser 'getBytes' comme vous les avez déjà. – Neo