1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > Aes加/解密工具类 --Java

Aes加/解密工具类 --Java

时间:2020-08-01 16:16:41

相关推荐

Aes加/解密工具类 --Java

文章目录

一、加/解密流程图二、生成密钥三、字符串加密解密1.字符串加密2.字符串解密 四、文件加密解密1.文件加密2.文件解密 五、测试

一、加/解密流程图

二、生成密钥

代码如下(示例):

/*** 生成加密密钥* @param seed 密钥种子+salt盐值* @param keySize key size* @return 密钥* @throws Exception 异常*/public static String generateKey(String seed, int keySize) throws Exception {KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");SecureRandom secureRandom;if (seed != null && !"".equals(seed)) {secureRandom = new SecureRandom(seed.getBytes());} else {secureRandom = new SecureRandom();}keyGenerator.init(keySize, secureRandom);SecretKey secretKey = keyGenerator.generateKey();return Base64.encodeBase64String(secretKey.getEncoded());}

三、字符串加密解密

1.字符串加密

代码如下(示例):

/*** 字符串加密** @param data 需要加密的字符串* @param key 密钥* @return 结果* @throws Exception 异常*/public static String encrypt(String data, String key) throws Exception {Key k = toKey(Base64.decodeBase64(key));byte[] raw = k.getEncoded();SecretKeySpec secretKeySpec = new SecretKeySpec(raw, "AES");Cipher cipher = Cipher.getInstance("AES");cipher.init(1, secretKeySpec);byte[] encypted = cipher.doFinal(data.getBytes());return Base64.encodeBase64String(encypted);}

2.字符串解密

代码如下(示例):

/*** 字符串解密** @param data 已加密的字符串* @param key 密钥* @return 结果* @throws Exception 异常*/public static String decrypt(String data, String key) throws Exception {Key k = toKey(Base64.decodeBase64(key));byte[] raw = k.getEncoded();SecretKeySpec secretKeySpec = new SecretKeySpec(raw, "AES");Cipher cipher = Cipher.getInstance("AES");cipher.init(2, secretKeySpec);byte[] encryptedBytes = Base64.decodeBase64(data);byte[] originalBytes = cipher.doFinal(encryptedBytes);return new String(originalBytes);}

四、文件加密解密

1.文件加密

代码如下(示例):

/*** 文件加密* @param key 密钥* @param sourceFile 源文件* @param targetFile 目标文件* @return 结果* @throws Exception 异常*/public static int encryptFile(String key, File sourceFile, File targetFile) throws Exception {if (sourceFile.exists() && sourceFile.isFile()) {if (!targetFile.getParentFile().exists()) {targetFile.getParentFile().mkdirs();}targetFile.createNewFile();InputStream in = new FileInputStream(sourceFile);OutputStream out = new FileOutputStream(targetFile);Key k = toKey(Base64.decodeBase64(key));byte[] raw = k.getEncoded();SecretKeySpec secretKeySpec = new SecretKeySpec(raw, "AES");Cipher cipher = Cipher.getInstance("AES");cipher.init(1, secretKeySpec);CipherInputStream cin = new CipherInputStream(in, cipher);byte[] cache = new byte[1024];boolean var11 = false;int nRead;while ((nRead = cin.read(cache)) != -1) {out.write(cache, 0, nRead);out.flush();}out.close();cin.close();in.close();log.debug("Encrypted successfully!!");return 1;} else {log.debug("Encrypted Failed," + sourceFile.getAbsolutePath() + "文件不存在!!");return 1;}}

2.文件解密

代码如下(示例):

/*** 文件解密* @param key 密钥* @param sourceFile 源文件* @param targetFile 目标文件* @return 结果* @throws Exception 异常*/public static int decryptFile(String key, File sourceFile, File targetFile) throws Exception {if (sourceFile.exists() && sourceFile.isFile()) {if (!targetFile.getParentFile().exists()) {targetFile.getParentFile().mkdirs();}targetFile.createNewFile();FileInputStream in = new FileInputStream(sourceFile);FileOutputStream out = new FileOutputStream(targetFile);Key k = toKey(Base64.decodeBase64(key));byte[] raw = k.getEncoded();SecretKeySpec secretKeySpec = new SecretKeySpec(raw, "AES");Cipher cipher = Cipher.getInstance("AES");cipher.init(2, secretKeySpec);CipherOutputStream cout = new CipherOutputStream(out, cipher);byte[] cache = new byte[1024];boolean var11 = false;int nRead;while ((nRead = in.read(cache)) != -1) {cout.write(cache, 0, nRead);cout.flush();}cout.close();out.close();in.close();log.debug("Decrypted successfully!!");return 0;} else {log.debug("Decrypted Failed," + sourceFile.getAbsolutePath() + "文件不存在!!");return 1;}}

五、测试

代码如下(示例):

public static void main(String[] args) {//密钥种子String seed = "123456";//salt盐值String salt = "tomy";//key sizeint keySize = 128;//secret keyString key = "";try {//生成secret keykey = GenerateKeyUtil.generateKey(seed + salt, keySize);System.out.println(key);//执行字符串加密String encrypt = AESUtil.encrypt("7895455", key);System.out.println(encrypt);//执行字符串解密String decrypt = AESUtil.decrypt(encrypt, key);System.out.println(decrypt);File sourceFile = new File("C:\\Users\\Desktop\\1.png");File targetFile = new File("C:\\Users\\Desktop\\2.png");File targetFile1 = new File("C:\\Users\\Desktop\\3.png");//执行文件加密encryptFile(key, sourceFile, targetFile);//执行文件解密decryptFile(key, targetFile, targetFile1);} catch (Exception e) {e.printStackTrace();}}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。