java AES加密
来源:互联网 发布:java scanner用法int 编辑:程序博客网 时间:2024/06/05 11:53
package com.sf.util;
import java.io.UnsupportedEncodingException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.KeyGenerator;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
* 对称密钥加密又叫专用密钥加密,即发送和接收数据的双方必使用相同的密钥对明文进行加密和解密运算。
* 对称密钥加密算法主要包括:DES、3DES、IDEA、FEAL、BLOWFISH等。
*
* @author Administrator
*/
public class AES {
/**
* 辅助数组,主要把byte值转化为对应的char值
*/
private static char[] CHARS = "0123456789abcdef".toCharArray();
/**
* 加密
*
* 因为没有操作对象,也没有操作相同的资源,所以不会出现多线程问题
*
* @param content
* 需要加密的内容
* @param password
* 加密密码
* @return
*/
public static byte[] encrypt(String content, String password) {
try {
KeyGenerator kgen = KeyGenerator.getInstance("AES");
kgen.init(128, new SecureRandom(password.getBytes()));
SecretKey secretKey = kgen.generateKey();
byte[] enCodeFormat = secretKey.getEncoded();
SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES");
Cipher cipher = Cipher.getInstance("AES");// 创建密码器
byte[] byteContent = content.getBytes("utf-8");
cipher.init(Cipher.ENCRYPT_MODE, key);// 初始化
byte[] result = cipher.doFinal(byteContent);
return result;
// return parseByte2HexStr(result); // 加密
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (NoSuchPaddingException e) {
e.printStackTrace();
} catch (InvalidKeyException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IllegalBlockSizeException e) {
e.printStackTrace();
} catch (BadPaddingException e) {
e.printStackTrace();
}
return null;
}
/**
* 把二进制byte数组转化为十六进制字符串
* @param buf
* @return
*/
public static String parseByte2HexStr(byte buf[]) {
StringBuffer sBuffer = new StringBuffer();
for (int i = 0; i < buf.length; i++) {
byte b = buf[i];
byte c1 = (byte) ((b & 0xF0) >> 4);
byte c2 = (byte) (b & 0x0F);
sBuffer.append(CHARS[c1]).append(CHARS[c2]);
}
return sBuffer.toString().toUpperCase();
}
public static byte[] parseHexByte2Str(String str) {
str = str.toLowerCase();
byte[] bytes = new byte[str.length() / 2];
char[] cs = str.toCharArray();
for (int i = 0; i < cs.length / 2; ++i) {
char c1 = cs[i * 2];
char c2 = cs[i * 2 + 1];
int a1, a2;
if (c1 < 'a') a1 = c1 - '0';
else a1 = (c1 - 'a') + 10;
if (c2 < 'a') a2 = c2 - '0';
else a2 = (c2 - 'a') + 10;
bytes[i] = (byte)(((a1 & 0x0F) << 4) | (a2 & 0x0F));
}
return bytes;
}
/**
* 解密
*
* @param content
* 待解密内容
* @param password
* 解密密钥
* @return
*/
public static byte[] decrypt(byte[] content, String password) {
try {
KeyGenerator kgen = KeyGenerator.getInstance("AES");
kgen.init(128, new SecureRandom(password.getBytes()));
SecretKey secretKey = kgen.generateKey();
byte[] enCodeFormat = secretKey.getEncoded();
SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES");
Cipher cipher = Cipher.getInstance("AES");// 创建密码器
cipher.init(Cipher.DECRYPT_MODE, key);// 初始化
byte[] result = cipher.doFinal(content);
return result; // 加密
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (NoSuchPaddingException e) {
e.printStackTrace();
} catch (InvalidKeyException e) {
e.printStackTrace();
} catch (IllegalBlockSizeException e) {
e.printStackTrace();
} catch (BadPaddingException e) {
e.printStackTrace();
}
return null;
}
@Test
public void testEncrypt() {
byte[] contentEncrypt = AES.encrypt("你好123威风威风22222222","12345678");
try {
String after = AES.parseByte2HexStr(contentEncrypt);
System.out.println("加密后:" + after);
byte[] bytes = AES.parseHexByte2Str(after);
System.out.println(new String(AES.decrypt(bytes, "12345678"),"UTF-8"));
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
import java.io.UnsupportedEncodingException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.KeyGenerator;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import org.junit.Test;
/**
* 可逆加密* 对称密钥加密又叫专用密钥加密,即发送和接收数据的双方必使用相同的密钥对明文进行加密和解密运算。
* 对称密钥加密算法主要包括:DES、3DES、IDEA、FEAL、BLOWFISH等。
*
* @author Administrator
*/
public class AES {
/**
* 辅助数组,主要把byte值转化为对应的char值
*/
private static char[] CHARS = "0123456789abcdef".toCharArray();
/**
* 加密
*
* 因为没有操作对象,也没有操作相同的资源,所以不会出现多线程问题
*
* @param content
* 需要加密的内容
* @param password
* 加密密码
* @return
*/
public static byte[] encrypt(String content, String password) {
try {
KeyGenerator kgen = KeyGenerator.getInstance("AES");
kgen.init(128, new SecureRandom(password.getBytes()));
SecretKey secretKey = kgen.generateKey();
byte[] enCodeFormat = secretKey.getEncoded();
SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES");
Cipher cipher = Cipher.getInstance("AES");// 创建密码器
byte[] byteContent = content.getBytes("utf-8");
cipher.init(Cipher.ENCRYPT_MODE, key);// 初始化
byte[] result = cipher.doFinal(byteContent);
return result;
// return parseByte2HexStr(result); // 加密
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (NoSuchPaddingException e) {
e.printStackTrace();
} catch (InvalidKeyException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IllegalBlockSizeException e) {
e.printStackTrace();
} catch (BadPaddingException e) {
e.printStackTrace();
}
return null;
}
/**
* 把二进制byte数组转化为十六进制字符串
* @param buf
* @return
*/
public static String parseByte2HexStr(byte buf[]) {
StringBuffer sBuffer = new StringBuffer();
for (int i = 0; i < buf.length; i++) {
byte b = buf[i];
byte c1 = (byte) ((b & 0xF0) >> 4);
byte c2 = (byte) (b & 0x0F);
sBuffer.append(CHARS[c1]).append(CHARS[c2]);
}
return sBuffer.toString().toUpperCase();
}
public static byte[] parseHexByte2Str(String str) {
str = str.toLowerCase();
byte[] bytes = new byte[str.length() / 2];
char[] cs = str.toCharArray();
for (int i = 0; i < cs.length / 2; ++i) {
char c1 = cs[i * 2];
char c2 = cs[i * 2 + 1];
int a1, a2;
if (c1 < 'a') a1 = c1 - '0';
else a1 = (c1 - 'a') + 10;
if (c2 < 'a') a2 = c2 - '0';
else a2 = (c2 - 'a') + 10;
bytes[i] = (byte)(((a1 & 0x0F) << 4) | (a2 & 0x0F));
}
return bytes;
}
/**
* 解密
*
* @param content
* 待解密内容
* @param password
* 解密密钥
* @return
*/
public static byte[] decrypt(byte[] content, String password) {
try {
KeyGenerator kgen = KeyGenerator.getInstance("AES");
kgen.init(128, new SecureRandom(password.getBytes()));
SecretKey secretKey = kgen.generateKey();
byte[] enCodeFormat = secretKey.getEncoded();
SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES");
Cipher cipher = Cipher.getInstance("AES");// 创建密码器
cipher.init(Cipher.DECRYPT_MODE, key);// 初始化
byte[] result = cipher.doFinal(content);
return result; // 加密
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (NoSuchPaddingException e) {
e.printStackTrace();
} catch (InvalidKeyException e) {
e.printStackTrace();
} catch (IllegalBlockSizeException e) {
e.printStackTrace();
} catch (BadPaddingException e) {
e.printStackTrace();
}
return null;
}
@Test
public void testEncrypt() {
byte[] contentEncrypt = AES.encrypt("你好123威风威风22222222","12345678");
try {
String after = AES.parseByte2HexStr(contentEncrypt);
System.out.println("加密后:" + after);
byte[] bytes = AES.parseHexByte2Str(after);
System.out.println(new String(AES.decrypt(bytes, "12345678"),"UTF-8"));
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
- 加密解密。(aes, java)
- JAVA的AES加密
- JAVA实现AES加密
- JAVA实现AES加密
- JAVA实现AES加密
- java,AES加密,解密
- java使用AES加密
- JAVA实现AES加密
- JAVA AES加密
- java AES加密解密
- JAVA实现AES加密
- java AES加密解密
- JAVA实现AES加密
- java使用AES加密
- JAVA实现AES加密
- JAVA实现AES加密
- JAVA实现AES加密
- java AES加密
- 对象序列化
- 设计思维与出稿方法
- Android程序读取sd卡中MP3信息
- every derived table must have its own alias
- VS2008集成QT4.7.2环境搭建
- java AES加密
- 创业公司开发资源整理(迭代中)
- Android强制设置横屏或竖屏
- 寻找类
- android进程间通信:使用AIDL
- 服务器控件的页面无刷效果 ClientClick
- UNITY 3D笔记
- sql server 日期格式转换 yyyy-mm-dd
- siciliy1564HOUSING