欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

简单易懂!常见加密算法实例解析(base64、md5等)

最编程 2024-02-03 08:01:03
...


开发中经常要用到加解密,熟悉它很有好处。

文章目录

  • ​​单向散列哈希算法​​
  • ​​md5​​
  • ​​DigestUtils(spring)实现md5​​
  • ​​对称加密算法​​
  • ​​base64​​
  • ​​BASE64​​
  • ​​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

对称加密和非对称加密的结合