Base64加密算法原理、具体例子及Java代码

  • Base64加密算法原理、具体例子及Java代码

    • 原理
    • 转换过程
      • 先将要转换的数据转成二进制数据
      • 补位
      • 转换
      • 示例
      • 代码实现
        • Java
        • PHP
      • 参考链接

原理

  1. 所有转换完成的密文中的任意一个字符,都是下面转换表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代码相关推荐

  1. Base64 加密算法原理

    Base64 加密算法原理 Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法. 因为在内存中每个字节占8位,即 1 by ...

  2. Java程序的运行原理 用记事本编写Java代码

    首先将Java代码写入源文件(.java)中→ 通过 javac 生成class文件(.class) → 再通过java命令执行程序:◆将class文件加载内存(相当于将东西输入大脑)◆检验class ...

  3. 对称加密算法原理--OpenSSL演示、iOS代码运用及CCCrypt安全隐患

    之前介绍了非对称加密算法,这篇文章介绍一下在非对称加密算法出现之前的对称加密算法,常见的对称加密算法.终端演示OpenSSL和iOS代码运用以及CCCrypt的安全隐患等. 对称加密算法:明文通过密钥 ...

  4. K-Means原理详解与Java代码实现细节

    本文作者:合肥工业大学 管理学院 钱洋 email:1563178220@qq.com 内容可能有不到之处,欢迎交流. 未经本人允许禁止转载. 最近,在使用K-means作为baseline跑数据,不 ...

  5. java栈属于哪个代,Java 代码执行原理

    原标题:Java 代码执行原理 西安鸥鹏it教育将在本篇文章中,将重点研究java源代码的执行原理,即从程序员编写JAVA源代码,到最终形成产品,在整个过程中,都经历了什么?每一步又是怎么执行的?执行 ...

  6. 【数学建模】最小二乘回归+Java代码实现

    文章目录 最小二乘法的历史 最小二乘法的原理 最小二乘法的公式 Java代码实现最小二乘法 输出预测结果 最小二乘法的历史 1801年,意大利天文学家朱赛普·皮亚齐发现了第一颗小行星谷神星.经过40天 ...

  7. java flv转mp3_如何使用java代码进行视频格式的转换(FLV)

    一,前言 在给网页添加视频播放功能后,发现上传的视频有各种格式,那么就需要将他么转换成FLV,以很好的支持在线视频播放. 二,准备 drv43260.dll,ffmpeg.exe,mencoder.e ...

  8. Java代码弱点与修复之——Risky cryptographic hashing function (RISKY_CRYPTO)

    弱点描述 Risky cryptographic, 有风险的加密算法.是指在Java代码中使用了有风险的加密算法. 加密哈希函数可以用来保护数据的完整性和隐私,但是,某些哈希函数可能存在风险,特别是早 ...

  9. base64加密原理及python、C语言代码实现

    base64算法 base64加密原理 关于base64,百度百科给出的解释是: Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制 ...

最新文章

  1. [转]深刻理解Python中的元类(metaclass)
  2. Python学习札记(二十三) 函数式编程4 sorted
  3. CodeGlance
  4. 如何在已安装TMG2010服务器上安装Symantec Backup Exec 2010 Remote Agent
  5. python 百度ocr识别_Python使用百度Ocr识别文字保存CSV
  6. wdos相关问题解答
  7. Windows server 2008 r2搭建FTP服务器
  8. 蓝桥杯2017年第八届C/C++省赛C组第三题-算式900
  9. 逃逸分析、栈上分配、标量替换、同步消除、锁消除
  10. [nssl 1322][jzoj cz 2109] 清兵线 {dp}
  11. Fehelper 下载、安装与使用
  12. 蓝色动力(DVD版)GHOSTXP SP3纯净选择版V2012.06
  13. xmarks 又可以使用了. 太棒了
  14. 神威太湖之光超级计算机搭载了40960,神威·太湖之光超级计算机上实现了千万核超大规模并行计算...
  15. AR增强现实技术解读
  16. 2021 秋招算法岗人间地狱?人工智能方向年薪 60w 起!
  17. C++ 简单的CPU使用率监控程序
  18. 解决Dmaven.multiModuleProjectDirectory system propery is not set. Check M2_HOME错误
  19. 运满满服务器繁忙显示500,运满满上线两年多 听听货车司机怎么说
  20. 单位: Baud,bits/s,波特率

热门文章

  1. tomcat发布前端项目
  2. java gettext用法_Java Label.getText方法代码示例
  3. 我知道的风俗 和我喜欢的节日
  4. 项目三:声乐盒(音节+音乐)实验
  5. git初使用之配置-.gitconfig .gitignore
  6. Windows10如何开启Mysql
  7. 第1关:小球自由落体运动-------C语言程序设计技术(循环结构程序设计1)
  8. 互联网保险:情景与设计逻辑
  9. IT168 CIO频道11月28日至12月01日文章精选
  10. 八招教你解决网络故障!