Java、JS、OC、Flutter的Base64编码和解码
题记
—— 执剑天涯,从你的点滴积累开始,所及之处,必精益求精,即是折腾每一天。
** | 你可能需要 |
---|---|
CSDN | 网易云课堂教程 |
掘金 | EDU学院教程 |
知乎 | Flutter系列文章 |
本文章将描述在 Java、JS、OC、Flutter中通过Base64算法将String进行编码与解码,以及通过分析了Base64编码的原理过程
1 Base64编码的应用场景分析
- 如微信中昵称特殊字符的处理,在向数据库中保存编码,取用时解码。
- 可以方便的将用户的任何输入转换成只包含特定字符的安全格式
- 某些系统中只能使用ASCII字符,通过Base64可以将非ASCII字符的数据转换成ASCII字符
- 如http协议当中的key value字段,必须进行URLEncode 不然出现的等号可能使解析失败 空格也会使http请求解析出现问题
2 Java8中的Base64编码
在Java7及7之前,要实代Base64编码,要么借助sun.misc.BASE64Encoder,或者apache commons-codec,再或者Guava、JAXB的DatatypeConverter,到了Java8,官方已经把Base64进行了重新优化,并直接放到了java.util包里了。
实现起来,比之前的都要简单优雅,性能卓越,无需引用第三方包。
///代码清单 1-1
public class CommonStringUtils {///构建编码器private final static Base64.Encoder ENCODER = Base64.getEncoder();///构建解码器private final static Base64.Decoder DECODER = Base64.getDecoder();/*** 解码 * @param str 需要解码的 String* @return 解码后的 String*/public static String decoderStr(String str) {try {// decode 解码后为byte字节数组 return new String(DECODER.decode(str), "utf-8");} catch (UnsupportedEncodingException e) {e.printStackTrace();return str;}}/*** * @param str 需要编码的字符串* @return 返回编辑后的字符串*/public static String endoderStr(String str) {try {return ENCODER.encodeToString(str.getBytes("utf-8"));} catch (UnsupportedEncodingException e) {e.printStackTrace();}return str;}}
3 JS 中的Base64编码与解码
从IE10+浏览器开始,所有浏览器就原生提供了Base64编码、解码方法,使用语法如下:
//需要编码的字符串
var str ="";
// 编码
var encodeStr = window.btoa(str) //需要解码的字符串
var decodeStr = "";
//解码
var dStr = window.atob(decodeStr)
3 OC中的Base64编码与解码
//需要编码的字符串
NSString *string = @"";
//获取编码后的Data
NSData *data = [string dataUsingEncoding:NSUTF8StringEncoding];//获取编码后的 String
//NSString *stringBase64 = [data base64Encoding]; // base64格式的字符串(不建议使用,用下面方法替代)
NSString *stringBase64 = [data base64EncodedStringWithOptions:NSDataBase64EncodingEndLineWithLineFeed]; //
//需要解码的字符串
NSString *stringBase64 = @"";
//获取解码后的 NSData
NSData *data = [[NSData alloc] initWithBase64EncodedString:stringBase64 options:NSDataBase64DecodingIgnoreUnknownCharacters];
//获取解码后的 String
NSString *string =[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
4 Flutter中的Base64编码与解码
使用dart:convert库进行编码解码
// base64库
import 'dart:convert' as convert;
class Base64Util {///Base64加密static String base64Encode(String str){///var content = convert.utf8.encode(str);var digest = convert.base64Encode(content);return digest;}///Base64解码static String base64Decode(String data){///获取解码后的字节数组List<int> bytes = convert.base64Decode(data);//获取解码的字条串String result = convert.utf8.decode(bytes);return result;}
}
5 Base64的编码原理
Base64编码之所以称为Base64,是因为其使用64个字符来对任意数据进行编码,同理有Base32、Base16编码。
标准base64只有64个字符(英文大小写、数字和+、/、=)以及用作后缀等号
['A', 'B', 'C', ... 'a', 'b', 'c', ... '0', '1', ... '+', '/']
假设我们要对 Hello! 进行Base64编码,按照ASCII表,其转换过程如下图所示:
可知 Hello! 的Base64编码结果为 SGVsbG8h ,原始字符串长度为6个字符,编码后长度为8个字符,每3个原始字符经Base64编码成4个字符,编码前后长度比3/4.
对上述编码过程的总结如下:
第一步 将所有字符转化为ASCII码然后通过ASCII码获取对应的8位二进制值
第二步 将三个字符的二进制归成一组(不足3个在后边补0),然后形成共24位的二进制组
第三步 将再24位的二进制组拆分成4组,每组6位
第四步 统一在6位二进制前补两个0凑足8位,每组由6个变为8个二进制位,总共32个二进制位,即四个字节
第五步 将补位后的32个二进制位的数据转为10进制即 Base64的十进制值,然后再从Base64编码表获取十进制对应的Base64编码,如上述的 18 对应的是 S ,6对应的是G ,21对应的是 V。
Java、JS、OC、Flutter的Base64编码和解码相关推荐
- Js对字符串进行base64编码和解码,中文报错:Failed to execute ‘btoa‘ on ‘Window‘: The string to be encoded contains cha
我最早使用的是atob和btoa这两个函数,但是会出现报错. 直接使用封装好的方法: /*** 编码base64*/ function Encode64(str) {return btoa(encod ...
- java解码base64的png图片_使用PHP对图片进行base64编码和解码(png、jpg,声音、视频)...
为什么要对图片base64编码 base64是网络上最常见的传输8Bit字节代码的编码方式之一.base64主要不是加密,它主要的用途是把一些二进制数转成普通字符用于网络传输.由于一些二进制字符在传输 ...
- android Java BASE64编码和解码二:图片的编码和解码
1.准备工作 (1)在项目中集成 Base64 代码,集成方法见第一篇博文:android Java BASE64编码和解码一:基础 (2)添加 ImgHelper 工具类 package com.a ...
- Java实现Base64编码和解码的方式
Base64 编码是什么? Base64 是一种编码的方式, 并不是安全领域的加密解密算法. Base64 的目的是把一些二进制符转成普通字符, 方便在网络上传输. 因为有些系统只能使用ASCII字符 ...
- 用 JS 进行 Base64 编码、解码
从IE10+浏览器开始,所有浏览器就原生提供了 Base64 编码.解码方法,不仅可以用于浏览器环境,Service Worker 环境也可以使用. 方法名就是 atob 和 btoa ,具体语法如下 ...
- Java 8中的Base64编码和解码
转自:https://juejin.im/post/5c99b2976fb9a070e76376cc Java 8会因为将lambdas,流,新的日期/时间模型和Nashorn JavaScript引 ...
- Java(35):Java Base64编码和解码工具类
Java Base64编码和解码工具类 Base64Util工具类: package com.ciphergateway.utils; import java.io.UnsupportedEncodi ...
- js php base64,JavaScript实现Base64编码与解码的代码详解
本篇文章给大家分享的是jJavaScript实现Base64编码与解码的代码详解,内容挺不错的,希望可以帮助到有需要的朋友 一.加密解密方法使用//1.加密 var str = '124中文内容'; ...
- Linux上的js解码,使用JavaScript实现Base64编码与解码
我们知道,浏览器的window对象提供有window.atob()和window.btoa()方法可以对字符串进行Base64编码和解码. console.log(window.btoa(window ...
最新文章
- linux 修改图片的尺寸
- 这么奇葩搞笑的代码注释你见过吗
- waitpid()函数
- CSDN审核机制有点迷惑,决定逐步搬迁到简书
- 多种Map简单使用和测试
- [Android]利用金山词霸API实现英汉互译APP
- skynet master/slave 模式
- 冠骋信息正式加入重庆市医疗器械行业协会
- 力扣 2104. 子数组范围和
- php实现钟表,用html5实现一个简单的钟表外观
- Java使用aspose生成简历
- Flutter仿网易云音乐 ---基础准备
- 【数据库基础知识六】内连接、外连接、自连接
- 计算机语言词汇量,汉语作为第二语言的词汇量测量工具研究
- 中外合作计算机专业的大学排名,2017中外合作办学大学排名
- 为什么不要去小公司上班?这是我血与泪的教训!!!
- PMM 监控原理以及部署
- 电脑防火墙未使用推荐的设置来保护计算机,防火墙无法使用推荐设置,
- fedora 27字体美化达到ubuntu级别
- Unity 中的音乐可视化
热门文章
- ECCV 2020 | 视觉引导的声源分离辅助立体声重构方法 Sep-Stereo
- Github 1300+ 星!旷视开源的深度强化学习绘画智能体论文解读
- os.getcwd上两级_Python os.getcwd() 方法
- 重磅 | 阿里AI labs百万美元年薪聘请两位顶级视觉科学家
- Pandas-DataFrame基础知识点总结
- 深度学习与TensorFlow:FCN论文学习笔记
- android 动态申请权限_你真的了解Android权限机制吗?
- 2016下半年网络规划设计师考试上午真题
- linux 真实内存,Linux计算真实可用内存
- redis最基础的入门教程