java/web工具类之MD5、AES、Base64算法数据加密

java/web工具类之MD5、AES、Base64算法数据加密

对加密解先理解:

比如:甲乙双方要通信,中间的连接可能被人窃听甚至篡改。解决办法就是把传输的内容进行加密,用密文去传输,这样即使被监听也没办法知道信息的具体内容。

加密时,甲乙双方可以约定一个密码A,甲用A加密,乙用A解密,这就是对称加密

对称加密存在一个问题是:密钥怎么传递给对方?

貌似没解,于是就出现了非对称加密,非对称加密时有两个密钥,就是公钥和私钥。用公钥加密的只能用私钥解密,反之用私钥加密的则只能用公钥解密。这样在流程上有点儿变化了。

原先在对称加密中,密钥没法传递,现在好了,密钥不用传递,因为公钥是公开的,谁都可以拿到。

但是还漏掉了一个问题:虽然篡改不了问题,那我总可以冒名发数据吧?

因为乙的公钥是公开的,那我就可以拿着乙的公钥给乙想发什么就发什么?

乙怎么知道数据甲发过来的呢?答案是用数字签名来验证。

总结:

加密技术通常分为两大类:“对称式"和"非对称式”。
非对称加密:包括RSA DSA RCC,非对称加密是相比对称加密而言的
对称加密:包括AES,DES,3DES。

其次,对应于安全问题的解决办法如下:

数据完整性问题:数据摘要验证
数据保密性问题:对称加密&非对称加密
身份验证问题:数字签名


1.Base64编码加密和解密

将数据转换为不便于识别的数据算是一种最简单的加密了,比如Base64编码。

Base64:属于对称加密算法

Base64是一种能将任意Binary资料用64种字元组合成字串的方法,而这个Binary资料和字串资料彼此之间是可以互相转换的,十分方便。

用处:

Base64这种编码是可逆的,也就是可以加密也可以解密。一般在web开发中常常用来加密图片路径,这种不是很重要又不想被人盗走的,就用这种简单加密。

在这里插入图片描述

JDK1.8以下

使用Java8以下的小伙伴,要使用Base64的编码与解码,就可以使用JDK里sun.misc套件下的BASE64Encoder和BASE64Decoder这两个类别,

用法如下:

	import sun.misc.BASE64Decoder;
	import sun.misc.BASE64Encoder;

	public static void main(String[] args) throws IOException{
   
   
		
		//java 8以下 import sun.misc.BASE64Decoder;
	    String text = "这是一段明文";
        byte[] bytes = text.getBytes();
        String encodedStr = encode(bytes);
        byte[] decodedBytes = decode(encodedStr); 
        System.out.println("原文字:"+text);
        System.out.println("加密字段:"+encodedStr);
        System.out.println("解密字段:"+new String(decodedBytes));
        
	}
    public static String encode(byte[] bytes){
   
   
        return new BASE64Encoder().encode(bytes);
    }
    public static byte[] decode(String encodeStr) throws IOException{
   
   
        return new BASE64Decoder().decodeBuffer(encodeStr);
    }

结果:
在这里插入图片描述

JDK1.8或以上

在目前的Java8中,已经内置Base64的实现类,可以通过java.util.Base64工具类来使用。
非常方便。
用法如下:

public static void main(String[] args) throws IOException{
   
   
		
		//Java 8 import java.util.Base64;
		final Base64.Decoder decoder = Base64.getDecoder();
		final Base64.Encoder encoder = Base64.getEncoder();
		
		String text = "这是一段明文";
		System.out.println("原文字:"+text);
		final byte[] textByte = text.getBytes("UTF-8");
		//编码
		String encodedText = encoder.encodeToString(textByte);
		System.out.println("加密字段:"+encodedText);
		//解码
		String jiemi = new String(decoder.decode(encodedText), "UTF-8");
		System.out.println("解密字段:"+jiemi);

效果:
在这里插入图片描述
实际测试编码与解码速度的话,Java 8提供的Base64,要比sun.mis c套件提供的还要快至少11倍,
所以:<

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

江湖一点雨

原创不易,鼓励鼓励~~~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值