关于Base64编码的

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

import java.io.*;

//BASE64 code 4 file
public class Base64

 static String BaseTable[] = {
"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P",
"Q","R","S","T","U","V","W","X","Y","Z","a","b","c","d","e","f",
"g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v",
"w","x","y","z","0","1","2","3","4","5","6","7","8","9","+","/"
};

 public static void main(String[] args)
 {
  File f = new File("www");;
  try
  { 
   FileInputStream out = new FileInputStream(f);
   byte[] b = new byte[(byte)f.length()];    //我要编码的目标文件的长度(字节数)作为byte数组的容量
   
   int n = out.read(b);        //读出文件的字节数
   if (n < 1)           //没有内容
    return;
   
   
   //System.out.println(n + " "  + f.length());
   byte[] buf = new byte[4];       //base64字符数组
   int n3byt = n / 3;         //3 bytes 组的个数, 3个字节分为一组(注意: 一个英文字母是一个字节, 一个汉字是2个字节)
   int nrest = n % 3;         //分组后剩余 bytes
   int k = n3byt * 3;         //n3byt这些组实际的大小
   int linelength = 0;         // 行长
   int i = 0;           // 指针
   
   
   //3-bytes分组, 把3个8字节的变成6个4字节的
   while (i < k)
   {
    //0xFC对应的二进制是11111100, 意思就是取前6位(因为b[i]的后2位被0与掉了), >>2表示右移2位, 即取前6位
    buf[0] = (byte)((b[i] & 0xFC) >> 2);
    
    /*0x03对应的二进制是00000011, 即留前一个字符b[i]的后2位, 要左移4位, 以便给下4位留个地方;
    0xF0对应的二进制是11110000, 取当前数的前4位作为6位数的后4位, 所以利用>>4, 和前一个数的后2位结合就是共6位了*/
    buf[1] = (byte)(((b[i] & 0x03) << 4) | ((b[i+1] & 0xF0) >> 4));
    
    //类似上面的, 取bytes[i+1]后4位作为高4位, 取bytes[i+2]前2为作为低2位
    buf[2] = (byte)(((b[i+1] & 0x0F) << 2) | ((b[i+2] & 0xC0) >> 6));
    
    //最后的低6位作为最后的6位
    buf[3] = (byte)( b[i+2] & 0x3F);
    
    System.out.println("After base64 encode: ");
    System.out.println("buf[0] is: " + BaseTable[buf[0]]);
    System.out.println("buf[1] is: " + BaseTable[buf[1]]);
    System.out.println("buf[2] is: " + BaseTable[buf[2]]);
    System.out.println("buf[3] is: " + BaseTable[buf[3]]);
    
    
    //处理尾部
    if (nrest==2)  //最后还剩2个字节, 差1个字节
    {
     buf[0] = (byte)(( b[k] & 0xFC) >> 2);   //注意啊, 是从k开始的
     buf[1] = (byte)(((b[k] & 0x03) << 4) | ((b[k+1] & 0xF0) >> 4));
     buf[2] = (byte)(((b[i+1] & 0x0F) << 2));    //低4位左移2位变成了6位, 左移会在低2位自动补0的 
    }
    else if (nrest==1) //最后还剩1个字节, 差2个字节
    {
     buf[0] = (byte)((b[k] & 0xFC) >> 2);   
     buf[1] = (byte)((b[k] & 0x03) << 4);   //低2位左移4位变成了6位
    }
    
    
    if (nrest > 0)  //发送尾部, nrest > 0说明是那些构不成一组(一组是3个字节)的
    {
     //即使只有一个字符, 也会肯定输出buf[0]和buf[1]的, 因为一个字符8位可以拆成2个6位的字符
     System.out.println("buf[0] is: " + BaseTable[buf[0]]);
     System.out.println("buf[1] is: " + BaseTable[buf[1]]);
     
     if (nrest==2)
      System.out.println("buf[2] is: " + BaseTable[buf[2]]);
     else
      System.out.println("buf[2] is: =");
     
     //会肯定输出一个=号的, 因为nrest > 0
     System.out.println("buf[3] is: =");
    }
    i+=3;
   }  
  }
  catch(FileNotFoundException e){e.printStackTrace();}
  catch(IOException e){e.printStackTrace();}
 }
}

 

Base64 编码 基本概念和应用场景 Base64是一种基于64个可打印字符来表示二进制数据的表示方法。由于2的6次方等于64,所以每6个比特为一个单元,对应某个可打印字符。三个字节有24个比特,对应于4个Base64单元,即3个字节需要用4个可打印字符来表示。它可用来作为电子邮件的传输编码。在Base64中的可打印字符包括字母A-Z、a-z、数字0-9 ,这样共有62个字符,此外两个可打印符号在不同的系统中而不同。编码后的数据比原始数据略长,为原来的4/3。 Base64常用于在通常处理文本数据的场合,表示、传输、存储一些 阅读详情

相关推荐

如何对 string 进行Base64编码,解码?

咨询区 Kevin Driedger:如何将指定的 string 编码base64。如何将 base64 解码成 string。回答区 andrew.fox:我来分享下对这个问题的处理...

dotNET跨平台 1783

java 二进制 base64编码_java自定义实现base64编码

1.base64编码换所谓base64编码,即按照规则把字符化为"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"这个字符集中的字符。具体规则如下:a.把每3个字节为一组,共24bit。每6bit一小组,每组前面加00,变为32bit。这样3个字节被扩展成了4个节,按照上面字符集编码。b.如果字节数不足3:1)当...

weixin_34355977的博客 1152

Java StringBase64编码

http://commons.apache.org/proper/commons-codec/download_codec.cgi下载commons-codec-1.11-bin.zip,调用commons-codec-1.11.jarBase64 base64 = new Base64();String base64Sign = base64.encodeToString(string.getB...

杨小扬的专栏 3万+

什么是Base64,以及在Java中使用Base64编码

Base64是一种用64个字符(0-9,a-z,A-Z,+,/)来表示二进制数据的方法,是基于64个可打印字符进行编码的。Base是一种索引编码,每6个bit位作为一个单元,对应一个字符,为了保证所输出的编码为可读字符,Base64制定了一个编码表,以便进行统一换,编码表的大小为2^6=64,这也是Base64名称的由来。

CSDN_YYD_997的博客 4441

base64编码_Base64编码详解

来源 | 公众号 架构师必备Base64编码原理Base64编码之所以称为Base64,是因为其使用64个字符来对任意数据进行编码,同理有Base32、Base16编码。标准Base64编码使用的64个字符为:这64个字符是各种字符编码(比如ASCII编码)所使用字符的子集,基本,并且可打印。唯一有点特殊的是最后两个字符,因对最后两个字符的选择不同,Base64编码又有很多变种,...

weixin_39621185的博客 2163

Base64编码详解

Base64 是一种将二进制数据换为 ASCII 字符串格式的编码方式。它广泛应用于需要在文本协议(如电子邮件、HTTP 请求)中传输二进制数据的场景。

跟佟格湾一起学习计算机知识吧~ 9335

HEX编码Base64编码

摘要 本文将讲述HEX 和Base64编码的规则。 HEX编码 hex编码也称之为Base16 编码 就是把一个字节,用十六进制来表示, 表示的结果得是字符形式的。 说过程大家就会更加容易理解 比如说字符的 ‘a’,在计算机底层存储的是 0110 0001 ,对应的16进制就是61 ,它对应的字符 是'61' 也就是说 ‘a’ 经过HEX编码化成了 '61' ,从计算存储二进制的角度是 从0110 0001经过HEX编码成了 0011 0110 0000 0001,占用的存储扩大了一倍。 其他任意

你好 1万+

base64怎么编码

换算单位 1字=2字节;1字节=8位;1位=1比特;1字=16位=16比特; 字节=Byte          比特=bit bit是表示信息的最小单位,只有两种状态:0和1 base64 base64代码对应表 base64代码范围:A-Za-z0-9+/ 26个大写字母、26个小写字母、10个数字、两个符号 26+26+10+2=64; 其实是 65 个字符, = 是填充字符; 64 个字符需..

weixin_52103018的博客 1407

图片Base64编码 base64编码图片

这两天给手机写了几个服务(接口形式),其他数据还好,图片实在没处理过,这里记录下使用base64编码遇到的坑。。。。 1、图片base64编码: public static String getImageStr(String imgUrl) {//将图片文件化为字节数组字符串,并对其进行Base64编码处理 String imgFile = imgUrl;// 待处理的

fanxiangru999的专栏 4992

Base64编码

一、Base64编码的由来 在参数传输的过程中经常遇到的一种情况:使用全英文的没问题,但一旦涉及到中文就会出现乱码情况。与此类似,网络上传输的字符并不全是可打印的字符,比如二进制文件、图片等。Base64的出现就是为了解决此问题,它是基于64个可打印的字符来表示二进制的数据的一种方法。 目前Base64已经成为网络上常见的传输8Bit字节代码的编码方式之一。在做支付系统时,系统之间的报文交互都需要使用Base64对明文进行码,然后再进行签名或加密,之后再进行(或再次Base64)传输。随之,Base64

xuanli4845的博客 4712

base64编码

这是 Base64 编码所使用的标准编码表,它包含了 64 个可打印的 ASCII 字符,按照一定顺序排列,用于将二进制数据换为对应的可打印字符形式。

weixin_68995006的博客 1091

BASE64编码——编码规则】

BASE64编码

XWWW668899的博客 1964

Openresty base64编码

OpenResty目前内建支持的有Base64和JSON两种格式,下面我们介绍base64. Base64格式使用64个字符,可以把任意数据换为ASCII码可见字符串,应用得非常普遍。OpenResty使用ngx.encode_base64和ngx.decode_base64这两个函数实现了标准的Base64编码和解码: local str = "1234" local enc = ngx.encode_base64(str) -- 编码为“ MTizNA==” local dec= ngx

赶路人儿 4619

关于Base64编码

很多朋友可能都会使用到BASE64这种编码格式,但是编码不等于加密(encoding is not encrypting),编码只是将数据进行格式化,而加密使数据具有保密性。 在编码方式的选择时,BASE64编码可以将数据换为普通文本格式,例如X.509标准格式的证书(.cer)就可以导出为BASE64编码格式的数据,如下所示: ----BEGIN CERTIFICATE---

NCNC 3241

base64编码_彻底弄明白Base64 编码

Base64 encoding/decoding常见于各种authentication和防盗链的实现当中。彻底搞懂它绝对提升团队troubleshooting的底气。我们从纯手工方式编码解码开始,然后看看学到的技能怎么样应用在实际的troubleshooting 中。准备工作: 我们应知道一个byte有8个bits,并且知道怎么表示它。 我们应该comfortable with hex, bina...

weixin_39849762的博客 1039

Android Base64编码

Base64编码简介 Base64编码是一种编码方式,可以把二进制数据编码为可见的字符数据,包含64个字符,A-Z, a-z,0-9,+,/,除此之外还有一个填充字符是后缀等号’=’。 由于Base64编码是六位一个字符,而一个字节占八位,所以编码的时候如果字节不是三的倍数,需要添加零值,注意,由于一个字节占六位,所以编码之后高两位会补0。 如Xu X u 零值 01011000

少年阿涛 1万+
上一篇: 04年刚开始学Java时的一些体会, 很菜的
下一篇: 一次作业题目-----话单计费(Java)
wzz24
博客等级 码龄24年 7粉丝 22原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值