加密方式之BASE64
来源:互联网 发布:北上战舰世界数据 编辑:程序博客网 时间:2024/05/22 17:26
最近开发中,遇到业务场景,需要通过接口获取XML报文中一个长度为3000字符串类型的IO图片流,了解后知道是通过BASE64加密的,学习了下BASE64加密。
一、BASE64简介
Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,大家可以查看RFC2045~RFC2049,上面有MIME的详细规范。Base64编码可用于在HTTP环境下传递较长的标识信息。例如,在Java Persistence系统Hibernate中,就采用了Base64来将一个较长的唯一标识符(一般为128-bit的UUID)编码为一个字符串,用作HTTP表单和HTTP GET URL中的参数。在其他应用程序中,也常常需要把二进制数据编码为适合放在URL(包括隐藏表单域)中的形式。此时,采用Base64编码具有不可读性,即所编码的数据不会被人用肉眼所直接看到。
二、BASE64的原理
1.假设有3个字符,首先先将他换成10进制ASCII码,然后转成2进制,少位用0补齐,保证8位。
2.因为ASCII码大小是一字节也就是8位,3个8位。又因为3*8=4*6,我们给他分成4分,每份6位。如果少位都用0补齐。
3.把6位码前2位加两个0,比如010000转完后就是00010000,这对计算机来说比较重要,变成了8位码。
4.将4个8位(也就是一字节)码按照RFC里的BASE64标准换算,下面也提供了标准表。
这样我们就得到了QVNU,也就是AST加密的结果。
下面是标准的BASE64编码表。
三、BASE64的应用场景
其实BASE64不是用来加密的。经过BASE64编码后的字符串,全部都是由标准键盘上面的常规字符组成,这样编码后的字符串在网关之间传递不会产生UNICODE字符串不能识别或者丢失的现象。其实EMAIL就是用base64编码过后再发送的。然后接收的时候再还原。还有一种情况下用BASE64编码也很好,比如一个图片文件,或者其他任何二进制文件。我可以把它编码成字符串。这样用XML或者数据库就能直接以文本的方式来存储这些文件了。
四、BASE64的加密和解密
前端使用js: pwd = new Base64.encode(pwd);后端使用java, new Base64().decodeBase64(pwd.getBytes()).toString();java的Base64()有提供decode和decodeBase64()这俩种方法,我习惯的以为是decode(),结果却是后者.下面是我编写的一个小的测试例子,利用sun jdk自带的sun.misc.BASE64Decoder进行加密和解密也可以通过很多第三方的开源JAR包进行加密解密,如:apache的commons-codec
import java.io.UnsupportedEncodingException;import sun.misc.*;/** * Created by Tanyunlong on 2016/10/18. */public class Base64Test { public static void main(String args[]){ String code="JDLKAHJKDAHJKDHASJKDHASJKHDKJASD"; String Base64Code=""; Base64Code=getbase64(code); System.out.println(Base64Code); String base64Code="SkRMS0FISktEQUhKS0RIQVNKS0RIQVNKS0hES0pBU0Q="; String result=getfromBase64(base64Code); System.out.println(result); } /** * Base 加密 * @param code * @return result */ public static String getbase64(String code){ byte[] b =null; String result=null; try { b=code.getBytes("utf-8"); }catch (UnsupportedEncodingException e){ e.printStackTrace(); } System.out.println("==============="+b); if (b!=null){ result=new BASE64Encoder().encode(b); } return result; } /** * 解密 * */ public static String getfromBase64(String baseCode){ byte[] b=null; String result=null; if (baseCode!=null){ BASE64Decoder decoder=new BASE64Decoder(); try { b=decoder.decodeBuffer(baseCode); result = new String(b, "utf-8"); }catch (Exception e){ e.printStackTrace(); } } return result; }}
0 0
- 加密方式之BASE64
- iOS中明文加密方式之base64加密
- base64 加密方式详解
- iOS之加密方式(二)实例/base64 /MD5/SHA
- CSharp之Base64加密
- 加密之base64
- JAVA加密解密之Base64
- Base64 加密之中文乱码
- java 加密之Base64示例
- java 加密之 Base64 算法
- MyBatis之Base64加密数据源
- 密码加密之MD5+Base64
- 解析discuz authcode&&base64加密方式
- iOS 面试问答之加密形式: AES加密, DES加密, MD5加密,SHA1加密, BASE64加密
- C#中base64之加密解密
- C#中base64之加密解密
- ios开发之DES+Base64 加密、解密
- 加密篇之三 - Base64
- [学习笔记]MySql之SQL语句优化
- GOF设计模式之单例模式的分类以及破解
- mybatis中之后台调出sql语句
- 静态库制作和分析
- memcache add,set,replace区别
- 加密方式之BASE64
- C# 调用打印机打印图片
- 欧拉工程第18题 出从三角形顶端走到底端的最大和
- *[Lintcode]Longest Consecutive Sequence最长连续序列
- 清华EMBA课程系列思考之十三(2) -- 管理心理学
- poj3268(最短路,dijkstra)
- 2016-10-18课后练习
- 泛型
- Hadoop-从mapper中输出不同值的类型的数据