注:本文为转载文章,原文请参考:Android数据加密之Base64编码算法

前言:

前面学习总结了平时开发中遇见的各种数据加密方式,最终都会对加密后的二进制数据进行Base64编码,起到一种二次加密的效果,其实呢Base64从严格意义上来说的话不是一种加密算法,而是一种编码算法,为何要使用Base64编码呢?它解决了什么问题?这也是本文探讨的东西?

什么Base64算法?

Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,Base64并不是安全领域的加密算法,其实Base64只能算是一个编码算法,对数据内容进行编码来适合传输。标准Base64编码解码无需额外信息即完全可逆,即使你自己自定义字符集设计一种类Base64的编码方式用于数据加密,在多数场景下也较容易破解。Base64编码本质上是一种将二进制数据转成文本数据的方案。对于非二进制数据,是先将其转换成二进制形式,然后每连续6比特(2的6次方=64)计算其十进制值,根据该值在A–Z,a–z,0–9,+,/ 这64个字符中找到对应的字符,最终得到一个文本字符串。基本规则如下几点:

  • 标准Base64只有64个字符(英文大小写、数字和+、/)以及用作后缀等号;
  • Base64是把3个字节变成4个可打印字符,所以Base64编码后的字符串一定能被4整除(不算用作后缀的等号);
  • 等号一定用作后缀,且数目一定是0个、1个或2个。这是因为如果原文长度不能被3整除,Base64要在后面添加\0凑齐3n位。为了正确还原,添加了几个\0就加上几个等号。显然添加等号的数目只能是0、1或2;
  • 严格来说Base64不能算是一种加密,只能说是编码转换。

下图为Base64编码表:

Base64编码的用处?

在计算机中任何数据都是按ascii码存储的,而ascii码的128~255之间的值是不可见字符。而在网络上交换数据时,比如说从A地传到B地,往往要经过多个路由设备,由于不同的设备对字符的处理方式有一些不同,这样那些不可见字符就有可能被处理错误,这是不利于传输的。所以就先把数据先做一个Base64编码,统统变成可见字符,这样出错的可能性就大降低了。

Base64具体实现

字符串进行Base64编码

String encodedString = Base64.encodeToString("whoislcj".getBytes(), Base64.DEFAULT);
Log.e("Base64", "Base64---->" + encodedString);

字符串进行Base64解码

String decodedString =new String(Base64.decode(encodedString,Base64.DEFAULT));
Log.e("Base64", "Base64---->" + decodedString);

对文件进行Base64编码

File file = new File("/storage/emulated/0/pimsecure_debug.txt");
FileInputStream inputFile = null;
try
{inputFile = new FileInputStream(file);byte[] buffer = new byte[(int) file.length()];inputFile.read(buffer);inputFile.close();encodedString = Base64.encodeToString(buffer, Base64.DEFAULT);Log.e("Base64", "Base64---->" + encodedString);
} catch (Exception e)
{e.printStackTrace();
}

对文件进行Base64解码

File desFile = new File("/storage/emulated/0/pimsecure_debug_1.txt");
FileOutputStream  fos = null;
try
{byte[] decodeBytes = Base64.decode(encodedString.getBytes(), Base64.DEFAULT);fos = new FileOutputStream(desFile);fos.write(decodeBytes);fos.close();
} catch (Exception e)
{e.printStackTrace();
}

针对Base64.DEFAULT参数说明

无论是编码还是解码都会有一个参数Flags,Android提供了以下几种:

  • DEFAULT 这个参数是默认,使用默认的方法来加密
  • NO_PADDING 这个参数是略去加密字符串最后的”=”
  • NO_WRAP 这个参数意思是略去所有的换行符(设置后CRLF就没用了)
  • CRLF 这个参数看起来比较眼熟,它就是Win风格的换行符,意思就是使用CR LF这一对作为一行的结尾而不是Unix风格的LF
  • URLSAFE 这个参数意思是加密时不使用对URL和文件名有特殊意义的字符来作为加密字符,具体就是以-和取代+和/

总结:

Base64编码看似简单,但是其在实际开发中使用相当广泛。目前项目中只是用到这么多,以后用到更复杂的情况的时候再做补充。

Android数据加密之——Base64编码算法相关推荐

  1. 浅谈Base64编码算法

    一.什么是编码解码 编码:利用特定的算法,对原始内容进行处理,生成运算后的内容,形成另一种数据的表现形式,可以根据算法,再还原回来,这种操作称之为编码. 解码:利用编码使用的算法的逆运算,对经过编码的 ...

  2. Base64编码算法

    转载:http://www.cnblogs.com/xqxacm/p/4886299.html 一.什么是编码解码 编码:利用特定的算法,对原始内容进行处理,生成运算后的内容,形成另一种数据的表现形式 ...

  3. JavaScript:实现将字节数组转换为 base64 编码算法(附完整源码)

    JavaScript:实现将字节数组转换为 base64 编码算法 function bufferToBase64 (binaryData) {// The base64 encoding uses ...

  4. Android图片的Base64编码与解码

    Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法. Base64编码是从二进制到字符的过程,可用于在HTTP环境下传递较 ...

  5. .Net Base64编码

    using System; using System.Text; using System.IO; using System.Security; using System.Security.Crypt ...

  6. base64编码类------原始码(C#)

    using system; namespace shapbse64 { /// <summary> /// 有关base64编码算法的相关操作 ///by 自由奔腾(wgscd) /// ...

  7. base64编码类------源代码(C#)

    base64编码类------源代码(C#) using  System;  namespace  shapBse64  ... {  /**//// <summary>  /// 有关b ...

  8. base64编码类源代码(C#)

    using System; namespace shapBse64 { /// <summary> /// 有关base64编码算法哋楿关操作 ///By 自由渀腾(wgscd) /// ...

  9. Android图片转base64问题记录

    1.编码标准有以下几种: CRLF Win风格的换行符,意思就是使用CR和LF这一对作为一行的结尾而不是Unix风格的LF. CRLF是Carriage-Return Line-Feed的缩写,意思是 ...

  10. Python base64编码

    Python base64编码 1.bytes.decode() decode()方法语法: bytes.decode(encoding="utf-8", errors=" ...

最新文章

  1. 【Scratch】青少年蓝桥杯_每日一题_2.13_碰苹果
  2. UPS蓄电池的内阻没有参考值,如何才能发现劣化蓄电池?
  3. 深度 | 阿里云蒋江伟:什么是真正的云原生?
  4. 强化学习扫盲贴:从Q-learning到DQN
  5. 前后端开发的心得体会_社招后端三面总结以及学习经验感言(操详细)
  6. SpringBoot+kaptcha生成验证码
  7. BZOJ1196 [HNOI2006]公路修建问题 【二分 + Kruskal】
  8. java 分布式 定时任务_Java中实现分布式定时任务的方法
  9. 确定有限自动机DFA和非确定有限自动机NFA
  10. openstack RPM打包
  11. Blender程序化地形制作
  12. js 仿微信投诉—引入vue.js,拆分组件为单个js
  13. Shadow 腾讯插件化——深度解剖框架设计
  14. OLTP系统与DSS系统对比
  15. iPhone X适配之MJ上拉加载更多的适配
  16. Windows常用bat脚本打开目录或文件
  17. linux中comm的用法,Linux之comm命令
  18. FICO配置详解之四:成本中心会计
  19. Web狗的CTF出题套路
  20. 复杂网络中衡量网络中节点中心性的几种度量指标

热门文章

  1. SAP采购定价过程-条件技术介绍
  2. 从根本上降低采购成本,不割韭菜~
  3. Navicat Premium远程连接ORACLE
  4. Hybrid LSTM and Encoder-Decoder Architecturefor Detection of Image Forgeries的复现梳理
  5. 教你批量采集晨光文具的商品图片到电脑中
  6. java txt转pdf乱码,openoffice将txt文本转pdf中文乱码
  7. 推断统计学-假设检验-匹配样本的假设检验的理解
  8. 图像工作回顾之七:人脸姿态估计
  9. rds mysql 导出数据文件_rds数据库导出
  10. 一篇超频菜鸟必看的基础知识大全!