整理下工作中常用到的加密解密算法和使用场景一、Base64和UrlBase64 二、Md5salt 二、对称加密 四、非对称加密 一、Base64和UrlBase64 1Base64 定义:严格意义上讲属于一种编解码方式; 使用64个通用的可打印字符来存储和表示二进制字数据,同时也可以进行简单的加密,生成不可读文本。 字符集范围: 〔A,B,C,。。。a,b,c,。。。0,1,。。。,‘〕 大小写字母,0到9,共65个,作为后缀填充 使用场景:简单加密 网络数据传输:url、cookie、网页中传输二进制数据 密钥存储 数字证书存储 实现方式CommonsCodec(简称CC推荐使用) BouncyCastle(简称BC) JDK(不推荐使用,内部api后期存在移除风险) CC方式实现 引入jar包dependencygroupIdcommonscodecgroupIdcommonscodecartifactIdversion1。15versiondependency 实现及测试类packagecom。util。base64;importjava。io。UnsupportedEncodingEimportorg。apache。commons。codec。binary。Base64;基于CommonsCodec的Base64加密publicclassBase64Util{privatestaticfinalStringENCODINGUTF8;一般Base64加密publicstaticStringencode(Stringdata)throwsUnsupportedEncodingException{byte〔〕encodedByteBase64。encodeBase64(data。getBytes(ENCODING));returnnewString(encodedByte,ENCODING);}安全Base64加密publicstaticStringencodeSafe(Stringdata)throwsUnsupportedEncodingException{注意:这里采用的encodeBase64(byte〔〕bytes,booleanarg1)arg1为true时,加密后的字符串每行为76个字符,不论每行够不够76个字符,都要在行尾添加rbyte〔〕encodedByteBase64。encodeBase64(data。getBytes(ENCODING),true);returnnewString(encodedByte,ENCODING);}Base64解密publicstaticStringdecode(Stringdata)throwsUnsupportedEncodingException{byte〔〕decodedByteBase64。decodeBase64(data。getBytes(ENCODING));returnnewString(decodedByte,ENCODING);}测试paramargsthrowsUnsupportedEncodingExceptionpublicstaticvoidmain(String〔〕args)throwsUnsupportedEncodingException{测试一般encodeStringdata这句是明文原文;System。out。println(原文data);StringencodedStrBase64Util。encode(data);System。out。println(加密后encodedStr);StringdecodedStrBase64Util。decode(encodedStr);System。out。println(解密后decodedStr);System。out。println(data。equals(decodedStr));System。out。println();测试安全encodeStringdata2这句是明文原文这句是明文原文;System。out。println(原文data2);StringencodedStr2Base64Util。encodeSafe(data2);System。out。println(加密后encodedStr2);StringdecodedStr2Base64Util。decode(encodedStr2);System。out。println(解密后decodedStr2);System。out。println(data2。equals(decodedStr2));}} 2UrlBase64 定义:由于标准的Base64编码后可能出现字符和,在URL中就不能直接作为参数,所以又有一种urlsafe的base64编码,其实就是把字符和分别变成和 作用:编码数据在网络中安全顺畅的传输 编码流程:1、明文使用BASE64进行加密 2、在BASE64的基础上进行以下编码: 1)去除尾部的 2)把替换成 3)把替换成 解码流程:1、把BASE64URL的编码做如下解码: 1)把替换成 2)把替换成 3)(计算BASE64URL编码长度)4 a)结果为0,不做处理 b)结果为2,字符串添加 c)结果为3,字符串添加 2、使用BASE64解码密文,得到原始的明文 基于CC实现UrlBase64加密解密packagecom。util。base64;importjava。io。UnsupportedEncodingEimportorg。apache。commons。codec。binary。Base64;基于CommonsCodec的URLBase64加密publicclassUrlBase64Util{privatestaticfinalStringENCODINGUTF8;URLBase64加密publicstaticStringencode(Stringdata)throwsUnsupportedEncodingException{byte〔〕encodedByteBase64。encodeBase64URLSafe(data。getBytes(ENCODING));returnnewString(encodedByte,ENCODING);}URLBase64解密publicstaticStringdecode(Stringdata)throwsUnsupportedEncodingException{byte〔〕decodedByteBase64。decodeBase64(data。getBytes(ENCODING));returnnewString(decodedByte,ENCODING);}测试paramargsthrowsUnsupportedEncodingExceptionpublicstaticvoidmain(String〔〕args)throwsUnsupportedEncodingException{Stringdata这里是明文System。out。println(原文data);StringencodedStrUrlBase64Util。encode(data);System。out。println(加密后encodedStr);StringdecodedStrUrlBase64Util。decode(encodedStr);System。out。println(解密后decodedStr);System。out。println(data。equals(decodedStr));}}