JAVA加解密
package file;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class AESUtil {
private static final Logger logger = LoggerFactory.getLogger(AESUtil.class);
private static final String defaultCharset = "UTF-8";
private static final String KEY_AES = "AES";
private static final String KEY_MD5 = "MD5";
private static MessageDigest md5Digest;
static {
try {
md5Digest = MessageDigest.getInstance(KEY_MD5);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
}
/**
* 加密
*
* @param data 需要加密的内容
* @param key 加密密码
* @return
*/
public static String encrypt(String data, String key) {
return doAES(data, key, Cipher.ENCRYPT_MODE);
}
/**
* 解密
*
* @param data 待解密内容
* @param key 解密密钥
* @return
*/
public static String decrypt(String data, String key) {
return doAES(data, key, Cipher.DECRYPT_MODE);
}
/**
* 加解密
*
* @param data
* @param key
* @param mode
* @return
*/
private static String doAES(String data, String key, int mode) {
try {
if (StringUtils.isEmpty(data) || StringUtils.isEmpty(key)) {
return null;
}
boolean encrypt = mode == Cipher.ENCRYPT_MODE;
byte[] content;
if (encrypt) {
content = data.getBytes(defaultCharset);
} else {
content = Base64.decodeBase64(data);
}
SecretKeySpec keySpec = new SecretKeySpec(md5Digest.digest(key.getBytes(defaultCharset)), KEY_AES);
Cipher cipher = Cipher.getInstance(KEY_AES);
cipher.init(mode, keySpec);
byte[] result = cipher.doFinal(content);
if (encrypt) {
result = Base64.encodeBase64(result);
}
return new String(result, defaultCharset);
} catch (Exception e) {
logger.error("AES密文处理异常", e);
}
return null;
}
}
package file;
public class helloWorld{
public static void main(String[] args) {
String content = "美女,约吗?";
String password = "123";
System.out.println("加密之前:" + content);
// 加密
String encrypt = AESUtil.encrypt(content, password);
System.out.println("加密后的内容:" + new String(encrypt));
// 解密
String decrypt = AESUtil.decrypt(encrypt, password);
System.out.println("解密后的内容:" + new String(decrypt));
}
}
效果如下:
JAVA使用AES加密,单步调试获得结果:
对于Oracle JDK 17(测试)
AES的默认密码为AES / ECB / PKCS5Padding
备注:
private static final int ECB_MODE = 0;
private static final int CBC_MODE = 1;
private static final int CFB_MODE = 2;
private static final int OFB_MODE = 3;
private static final int PCBC_MODE = 4;
private static final int CTR_MODE = 5;
private static final int CTS_MODE = 6;
static final int GCM_MODE = 7;
参考链接
Mac 安装 IDEA
Mac 安装 Tomcat
Mac 安装JDK
Jar包下载链接
Java AES:
https://www.it1352.com/558413.html
https://www.cnblogs.com/better-farther-world2099/p/13293291.html
https://blog.csdn.net/solidsunshine/article/details/79505071
Go 加解密:
https://blog.csdn.net/guyan0319/article/details/108753107
https://gitee.com/leonardodacn/gocrypto/tree/master
Go RSA
https://segmentfault.com/a/1190000004151272
Go 加解密
Go ECB实现
Go 加解密汇总
Go 加解密库