...
开发中经常要用到加解密,熟悉它很有好处。
文章目录
- DigestUtils(spring)实现md5
- jdk自带base64工具
- base64有什么好处
- 非对称加密算法(又称:公开密钥加密算法)
- 对称加密和非对称加密的结合
单向散列哈希算法
摘要算法的特点:
1、无论输入的长度是多少,输出总是固定的长度。
2、如果输入有变化,摘要一定不同。
基于这个原理可以对数据的完整性和一致性进行校验。
由于是提取的不是全部内容,所以无法还原为原始值。
MD5、SHA(128、256)系列
md5
摘要算法
DigestUtils(spring)实现md5
//md5 单向加密
String password="芝麻开门";
String digest = DigestUtils.md5DigestAsHex(password.getBytes()); // digest是摘要算法,这里只生成的字符串
System.out.println(digest);
对称加密算法
DES、3DES、AES、Blowfish、IDEA、RC5、RC6
base64
BASE64
base64工具类有很多。
jdk自带base64工具
jdk自带的base64工具就不错。 类路径为: java.util.Base64
// jdk自带的BASE64 加解密工具
String password="芝麻开门";
BASE64Encoder base64Encoder = new BASE64Encoder();
String encode = base64Encoder.encode(password.getBytes()); // 加密
System.out.println("加密为字符串: " + encode);
BASE64Decoder decoder = new BASE64Decoder();
try {
String decode = new String ( decoder.decodeBuffer(encode)); // 解密
System.out.println("解密为: " + decode);
} catch (IOException e) {
e.printStackTrace();
}
再来一个例子:
// 文件流到base64字符串
File refereeFile = new File("D://我的.jpg");
byte[] refereeFileOriginalBytes = FileUtils.readFileToByteArray(refereeFile);
String base64String = Base64.getEncoder().encodeToString(refereeFileOriginalBytes);
logger.info("base64字符串:{}",base64String);
//base64字符串到文件
byte[] bytes = Base64.getDecoder().decode(base64String);
File file = new File("D://base64转换为我的.jpg");
FileUtils.writeByteArrayToFile(file,bytes); // 执行完之后去文件系统查看是否有这个文件
字符串直接复制到java,因为太大可能报错,所以最好把字符串写在文件里面再读取,如下例子:
// 文件流到base64字符串
File refereeFile = new File("D://base64String.txt");
try {
String base64String = FileUtils.readFileToString(refereeFile);
//base64字符串到文件
byte[] bytes = Base64.getDecoder().decode(base64String);
File file = new File("D://base64转换为我的.jpg");
FileUtils.writeByteArrayToFile(file,bytes); // 执行完之后去文件系统查看是否有这个文件
} catch (IOException e) {
e.printStackTrace();
}
base64有什么好处
1是不直接显示文件流,稍微安全些。
另外,如果不考虑性能,数据之间的转移也比较方便,就当做是个大点的字符串。
对于需要反复读写的不是特别大的文件,可以把base64放在内存中。省去了io和网络rest的时间。
非对称加密算法(又称:公开密钥加密算法)
RSA
对称加密和非对称加密的结合