Base64加密算法原理、具体例子及Java代码
Base64加密算法原理、具体例子及Java代码
- Base64加密算法原理、具体例子及Java代码
- 原理
- 转换过程
- 先将要转换的数据转成二进制数据
- 补位
- 转换
- 示例
- 代码实现
- Java
- PHP
- 参考链接
原理
- 所有转换完成的密文中的任意一个字符,都是下面转换表64个中的一个
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/
- Base64二进制数6位为一个单元(所以总字符数只能是64),一个字节有8位,所以可以说:3个原字符将会转换成4个Base64密文。
转换过程
先将要转换的数据转成二进制数据
根据ASCII编码值进行转换
补位
在每24个二进制位中:
6位为一个单位,不够先补0。
6位都是0,转换成等号。
转换
根据这个转换表获取不同
示例
下面的示例包含了无需补位、补1位和补2位的转换
代码实现
Java
这个可以直接使用java自带的函数(java 8之后)
final Base64.Decoder decoder = Base64.getDecoder();
final Base64.Encoder encoder = Base64.getEncoder();
final String text = "字串文字";
final byte[] textByte = text.getBytes("UTF-8");
//编码
final String encodedText = encoder.encodeToString(textByte);
System.out.println(encodedText);
//解码
System.out.println(new String(decoder.decode(encodedText), "UTF-8"));final Base64.Decoder decoder = Base64.getDecoder();
final Base64.Encoder encoder = Base64.getEncoder();
final String text = "字串文字";
final byte[] textByte = text.getBytes("UTF-8");
//编码
final String encodedText = encoder.encodeToString(textByte);
System.out.println(encodedText);
//解码
System.out.println(new String(decoder.decode(encodedText), "UTF-8"));
或者使用 org.apache.commons中的函数
import java.io.IOException;import org.apache.commons.codec.binary.Base64;import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;/*** 该类是Base64算法的实现*/public class JavaBase64 {private static String src = "面向对象编程,object-oriented!@#*5"; // 需要加密的原始字符串public static void main(String[] args) throws IOException {System.out.println("原始字符串:\t\t\t" + src);System.out.println();jdkBase64();System.out.println();commonsCodecBase64();System.out.println();bouncyCastleBase64();}/** JDK实现Base64编码 */public static void jdkBase64() throws IOException{//如果这里没有出现sun的base64可以从Build Path中删除然后添加BASE64Encoder encoder = new BASE64Encoder();String encode = encoder.encode(src.getBytes());//编码BASE64Decoder decoder = new BASE64Decoder();String decode = new String(decoder.decodeBuffer(encode));//解码System.out.println("JDK实现的base64编码:\t\t" + encode);System.out.println("JDK实现的base64解码:\t\t" + decode);}/** Commons Codec实现base64编码 */public static void commonsCodecBase64() {byte[] encode = Base64.encodeBase64(src.getBytes());byte[] decode = Base64.decodeBase64(encode);System.out.println("Commons Codec实现base64编码:\t" + new String(encode));System.out.println("Commons Codec实现base64解码:\t" + new String(decode));}/**Bouncy Castle实现base64编码 */public static void bouncyCastleBase64() {byte[] encode = org.bouncycastle.util.encoders.Base64.encode(src.getBytes());byte[] decode = org.bouncycastle.util.encoders.Base64.decode(encode);System.out.println("Bouncy Castle实现base64编码:\t"+new String(encode));System.out.println("Bouncy Castle实现base64解码:\t"+new String(decode));}
}
PHP
<?php/***base64编码方法、本方法只是做base64转换过程代码举例说明,通过该例子可以任意改造不同语言版*@author 程默*@copyright http://blog.chacuo.net*@param $src 原字符串*@return string base64字符串**/function c_base64_encode($src){static $base="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";将原始的3个字节转换为4个字节$slen=strlen($src);$smod = ($slen%3);$snum = floor($slen/3);$desc = array();for($i=0;$i<$snum;$i++){读取3个字节$_arr = array_map('ord',str_split(substr($src,$i*3,3)));///计算每一个base64值$_dec0= $_arr[0]>>2;$_dec1= (($_arr[0]&3)<<4)|($_arr[1]>>4);$_dec2= (($_arr[1]&0xF)<<2)|($_arr[2]>>6); $_dec3= $_arr[2]&63;$desc = array_merge($desc,array($base[$_dec0],$base[$_dec1],$base[$_dec2],$base[$_dec3]));}if($smod==0) return implode('',$desc);///计算非3倍数字节$_arr = array_map('ord',str_split(substr($src,$snum*3,3)));$_dec0= $_arr[0]>>2;///只有一个字节if(!isset($_arr[1])){$_dec1= (($_arr[0]&3)<<4);$_dec2=$_dec3="=";}else{///2个字节$_dec1= (($_arr[0]&3)<<4)|($_arr[1]>>4);$_dec2= $base[($_arr[1]&7)<<2];$_dec3="=";}$desc = array_merge($desc,array($base[$_dec0],$base[$_dec1],$_dec2,$_dec3));return implode('',$desc);}
参考链接
Base64 算法原理,以及编码、解码【加密、解密】 介绍
最全的加密算法之对称加密和非对称加密
Base64加密算法原理、具体例子及Java代码相关推荐
- Base64 加密算法原理
Base64 加密算法原理 Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法. 因为在内存中每个字节占8位,即 1 by ...
- Java程序的运行原理 用记事本编写Java代码
首先将Java代码写入源文件(.java)中→ 通过 javac 生成class文件(.class) → 再通过java命令执行程序:◆将class文件加载内存(相当于将东西输入大脑)◆检验class ...
- 对称加密算法原理--OpenSSL演示、iOS代码运用及CCCrypt安全隐患
之前介绍了非对称加密算法,这篇文章介绍一下在非对称加密算法出现之前的对称加密算法,常见的对称加密算法.终端演示OpenSSL和iOS代码运用以及CCCrypt的安全隐患等. 对称加密算法:明文通过密钥 ...
- K-Means原理详解与Java代码实现细节
本文作者:合肥工业大学 管理学院 钱洋 email:1563178220@qq.com 内容可能有不到之处,欢迎交流. 未经本人允许禁止转载. 最近,在使用K-means作为baseline跑数据,不 ...
- java栈属于哪个代,Java 代码执行原理
原标题:Java 代码执行原理 西安鸥鹏it教育将在本篇文章中,将重点研究java源代码的执行原理,即从程序员编写JAVA源代码,到最终形成产品,在整个过程中,都经历了什么?每一步又是怎么执行的?执行 ...
- 【数学建模】最小二乘回归+Java代码实现
文章目录 最小二乘法的历史 最小二乘法的原理 最小二乘法的公式 Java代码实现最小二乘法 输出预测结果 最小二乘法的历史 1801年,意大利天文学家朱赛普·皮亚齐发现了第一颗小行星谷神星.经过40天 ...
- java flv转mp3_如何使用java代码进行视频格式的转换(FLV)
一,前言 在给网页添加视频播放功能后,发现上传的视频有各种格式,那么就需要将他么转换成FLV,以很好的支持在线视频播放. 二,准备 drv43260.dll,ffmpeg.exe,mencoder.e ...
- Java代码弱点与修复之——Risky cryptographic hashing function (RISKY_CRYPTO)
弱点描述 Risky cryptographic, 有风险的加密算法.是指在Java代码中使用了有风险的加密算法. 加密哈希函数可以用来保护数据的完整性和隐私,但是,某些哈希函数可能存在风险,特别是早 ...
- base64加密原理及python、C语言代码实现
base64算法 base64加密原理 关于base64,百度百科给出的解释是: Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制 ...
最新文章
- [转]深刻理解Python中的元类(metaclass)
- Python学习札记(二十三) 函数式编程4 sorted
- CodeGlance
- 如何在已安装TMG2010服务器上安装Symantec Backup Exec 2010 Remote Agent
- python 百度ocr识别_Python使用百度Ocr识别文字保存CSV
- wdos相关问题解答
- Windows server 2008 r2搭建FTP服务器
- 蓝桥杯2017年第八届C/C++省赛C组第三题-算式900
- 逃逸分析、栈上分配、标量替换、同步消除、锁消除
- [nssl 1322][jzoj cz 2109] 清兵线 {dp}
- Fehelper 下载、安装与使用
- 蓝色动力(DVD版)GHOSTXP SP3纯净选择版V2012.06
- xmarks 又可以使用了. 太棒了
- 神威太湖之光超级计算机搭载了40960,神威·太湖之光超级计算机上实现了千万核超大规模并行计算...
- AR增强现实技术解读
- 2021 秋招算法岗人间地狱?人工智能方向年薪 60w 起!
- C++ 简单的CPU使用率监控程序
- 解决Dmaven.multiModuleProjectDirectory system propery is not set. Check M2_HOME错误
- 运满满服务器繁忙显示500,运满满上线两年多 听听货车司机怎么说
- 单位: Baud,bits/s,波特率