Java 使此算法适用于文件而不是字符串
你好,我需要AES算法的数据文件,而不是字符串 不知道如何修改这个代码。。。。。 我想要Java 使此算法适用于文件而不是字符串,java,algorithm,encryption,Java,Algorithm,Encryption,你好,我需要AES算法的数据文件,而不是字符串 不知道如何修改这个代码。。。。。 我想要公共静态字符串加密获取通行证和文件路由,并用原始文件替换加密的文件 public class AES { private static SecretKeySpec secretKey; private static byte[] key; public static void setKey(String myKey) { MessageDigest sha =
公共静态字符串加密
获取通行证和文件路由,并用原始文件替换加密的文件
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;
}
}
一些意见:
setKey
是public
,但您可以将其用作private
。不要将它们的密钥设置为加密
,将其留给调用者(我的首选选项),或将其设置为私有
,将其重新定义为某种帮助函数encrypt
获取一个字符串
,然后将其转换为字节[]
(使用getBytes()
),并且您希望加密文件,这些文件通常称为字节,而不是字符串(并非所有文件都是文本文件)。它应该获取并返回字节[]
,IMO。如果您想将文件视为文本文件,请忽略此文件加密
做一些它不应该做的事情。正如所命名的,它应该只加密。不要让它使用文件等encryptFile
使用
文件。readAllBytes
(或阅读有关阅读文本文件的内容)。使用
encrypt
加密数据。使用
Files.write
写回文件。您应该先看一看非常感谢您的帮助您的意思是“公共静态字节[]加密(字节[]strotencrypt.getBytes(),字符串机密)”?那么这一行呢:“return Base64.getEncoder().encodeToString(cipher.doFinal(strotencrypt.getBytes(“UTF-8”));”?No.公共静态字节[]加密(byte[]toEncrypt,String secret)
。至于return语句,您应该只使用.encode
(而不是encodeToString
),不应该使用getBytes
,因为您已经有了它们。