2017-10-07 37 views
-2

你好我需要AES算法的数据文件不是字符串 而且不知道如何修改这个代码..... 我想要public static String encrypt得到pass和file route并替换加密的与原始文件的文件使这个算法的AES文件不是字符串

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

你应该看看[问] – pvg

回答

0

几个意见:

  1. setKeypublic,但是你把它作为private。请勿将它们设置为encrypt中的密钥,并将其留给呼叫者(我的首选选项)或使其成为private,将其重新配置为某种辅助功能。
  2. encrypt得到了String只把它变成一个byte[](使用getBytes()),反正要加密文件,这些文件通常被称为字节,而不是字符串(不是所有的文件都是文本)。它应该得到并返回byte[],IMO。如果您想将文件视为文本,请忽略此文件。
  3. 你希望encrypt做它不应该做的事情。正如所命名的,它只应该加密。不要让它使用文件等

所以我的建议是,创建一个新的方法encryptFile
使用Files.readAllBytes(或读取this关于读取文本文件)。
使用encrypt加密数据。
使用Files.write回写到文件。

+0

首先非常感谢您的帮助 您的意思是“public static byte [] encrypt(byte [] strToEncrypt.getBytes(),String secret)”? ()“);”“;”“”“”“”“”“”“”“”“”“”“”“”“”“”“”“ 那么这行代码如何:”return Base64.getEncoder()。encodeToString(cipher.doFinal(“UTF-8”))); ? –

+0

编号'公共静态字节[]加密(字节[] toEncrypt,字符串秘密)'。至于return语句,你应该只使用'.encode'(而不是'encodeToString'),你不应该使用'getBytes'。 – Neo