目录

  • 前言
  • 一、base64加密与解密
    • 1. base64有填充的编码与解码
    • 2. base64无填充的编码与解码
  • 二、MIME友好型base64加密与解密

前言

Base64 编码会将字符串编码得到一个含有 A-Za-z0-9+/ 的字符串。
标准的 Base64 并不适合直接放在URL里传输,因为URL编码器会把标准 Base64 中的“/”和“+”字符变为形如 “%XX” 的形式,而这些 “%” 号在存入数据库时还需要再进行转换,因为 ANSI SQL 中已将“%”号用作通配符。

一、base64加密与解密

1. base64有填充的编码与解码

在 Base64 编码中,输出编码字符串的长度必须是 3 的倍数。如果不是 3 的倍数编码器会根据需要在编码结尾添加一个或两个填充字符 “=” 以满足此要求。
在解码时,解码器会丢弃结尾的那些额外的填充字符进行解码。

     //Base64编码String str = "hello!你好,小明!";String encodedString = Base64.getEncoder().encodeToString(str.getBytes());System.out.println(encodedString); //aGVsbG8h5L2g5aW9LOWwj+aYju+8gQ==//Base64解码byte[] decodedBytes = Base64.getDecoder().decode(encodedString);String decodedString = new String(decodedBytes);System.out.println(decodedString); //hello!你好,小明!

2. base64无填充的编码与解码

无填充的编码编码后的字符串结尾不会添加 “=” 字符。一般都使用此方法进行base64加密与解密。

     //Base64编码String str = "hello!你好,小明!";String encodedString = Base64.getEncoder().withoutPadding().encodeToString(str.getBytes());System.out.println(encodedString); //aGVsbG8h5L2g5aW9LOWwj+aYju+8gQ//Base64解码byte[] decodedBytes = Base64.getDecoder().decode(encodedString);String decodedString = new String(decodedBytes);System.out.println(decodedString); //hello!你好,小明!

注意:

除了上面介绍的base64类进行base64加密解密,jdk的BASE64Decoder类也提供了base64加密和解密。
但是不推荐使用BASE64Decoder类进行加密解密。
因为BASE64Decoder是对MIME友好的,编码后的字符串如果超过76个字符就会换行,所以BASE64Decoder编码后的字符串会后\n\r这样的字符,在一些处理\n\r的代码里可能会有问题。如果你非要使用BASE64Decoder类进行加密解密,请使用replaceAll(“\r|\n”, “”)对编码后的\n和\r进行替换。

二、MIME友好型base64加密与解密

MIME友好型base64加密与解密即加密后如果长度每大于76就会加入\r\n这样的换行控制符

     //Base64编码String str = "727dced7-15c7-48c6-bb11-416ab51f98bc-2a19434a-3a64-496e-b07b-b51b0445384c-22525be7-82c7-4a72-8594-238712d4d59e";byte[] encodedAsBytes = str.getBytes();String encodedMime = Base64.getMimeEncoder().encodeToString(encodedAsBytes);System.out.println("编码:"+encodedMime);//Base64解码byte[] decodedBytes = Base64.getMimeDecoder().decode(encodedMime);String decodedMime = new String(decodedBytes);System.out.println("解码:"+decodedMime); //727dced7-15c7-48c6-bb11-416ab51f98bc-2a19434a-3a64-496e-b07b-b51b0445384c-22525be7-82c7-4a72-8594-238712d4d59e

java base64加密与解密相关推荐

  1. JAVA各种加密与解密方式

    之前有兴趣研究了一下java的加密与解密的方法,发现市面上有好多种加密解密方式,在这里整理了一下. 目录 1.BASE64加密/解密 2.MD5(Message Digest Algorithm)加密 ...

  2. Base64加密与解密使用(+拓展:盐值法)

    1.什么是Base64 Base64是一种直接利用64位可打印字符来表示二进制数据的算法,是一种比较常见的加密算法.JDK1.8版本提供了java.util.Base64的工具类,使用Base64提供 ...

  3. php cookie 加密解密,php 使用base64加密、解密cookie的示例

    这篇文章主要为大家详细介绍了php 使用base64加密.解密cookie的示例,具有一定的参考价值,可以用来参考一下. 感兴趣的小伙伴,下面一起跟随512笔记的小编罗X来看看吧. 经测试代码如下: ...

  4. python中base64加密和解密

    base64加密和解密有点头疼,必须要记录下来,以后忘了也能再来复习下 当然啦,能一直记住是最好的-加油吧,少年(其实已经好老了) 操作环境 win10,python3 base的原理 这个还是别人讲 ...

  5. Javascript Base64加密与解密

    Base64加密与解密 Base64.js function Base64() {// private property_keyStr = "ABCDEFGHIJKLMNOPQRSTUVWX ...

  6. shell脚本:base64加密、解密字符串并赋值给变量方法

    几经波折才能够实现使用 base64 加密.解密字符串并赋值给变量.网上绝大多数是使用 echo 管道实现 加密和解密字符串的输出. 代码如下: pwd=$( base64 -d <<&l ...

  7. Java Base64 加密解密 (数据加密或解决手机Emoji表情被数据库过滤掉的问题)

    2017年06月08日 10:15:19 glimmer_it 阅读数:359更多 个人分类: 安全加密 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.ne ...

  8. Java base64加密解密 两种实现方式

    1.为什么要使用Base 64 Base 64主要用途不是加密,而是把一些二进制数转成普通字符,方便在网络上传输. 由于一些二进制字符在传输协议中属于 控制字符,不能直接传送,所以需要转换一下才可以. ...

  9. Base64加密与解密

    Base64是jdk1.8新增的加密处理类,Base64处理,在这个类里面有两个内部类 Base64.Encoder :进行加密处理   public byte[] encode(byte[] src ...

最新文章

  1. python spilt() 方法 ,分隔字符串
  2. EF架构~为分组添加位运算聚合方法
  3. 关于hibernate的查询
  4. org.jeecgframework.core.common.exception.MyExceptionHandler]java.lang.NullPointerException
  5. jar 打包命令详解
  6. python逻辑表达式是什么_如何在Python中处理逻辑表达式?
  7. 精通~Scrum为什么会转型困难
  8. 【树叶识别】基于matlab HU不变矩树叶识别【含Matlab源码 797期】
  9. VM虚拟机完美运行macos
  10. Matlab查看像素坐标
  11. 决战大数据(升级版):大数据的关键思考 - 电子书下载(高清版PDF格式+EPUB格式)...
  12. 家(单位)电信宽带,50M上行带宽,不用浪费了,发布Web(网站)应用刚好
  13. 【Photoshop】Photoshop 64Bit与Camera Raw安装包
  14. 如何利用已有的切片文件生成TPK
  15. CentOS7 下配置svn的安装及基础配置介绍
  16. 表格合并怎么将多工作簿同名表合并到一起
  17. 《数据结构》实验指导书
  18. 华为SNS交换机(OEM博科FC交换机)configupload无法使用ftp协议处理方法
  19. 同主机容器基于XDP的连通性实验
  20. 使用git进行版本控制

热门文章

  1. 03.青龙面板——掘金自动签到、沾喜气、抽奖
  2. 微信小程序开发之六 —— 数据绑定与列表渲染
  3. 纯Java项目批处理(打包方法二)
  4. JVM垃圾回收算法及垃圾回收器
  5. 最新最快的星座信息查询工具
  6. vlc android demo,使用VLC-Android寫一個簡單的電視直播demo
  7. 无法识别的属性“targetFramework”解决办法
  8. 永磁材料行业研究及十四五规划分析报告
  9. 2022.10.5 英语背诵
  10. 2022-2028全球及中国数字集成电路行业研究及十四五规划分析报告