当前位置:   article > 正文

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

64加密

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

原理


  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"));
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

或者使用 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));
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
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);

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93

参考链接

Base64 算法原理,以及编码、解码【加密、解密】 介绍

最全的加密算法之对称加密和非对称加密

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/929049
推荐阅读
相关标签
  

闽ICP备14008679号