说起来Base64编码,很多人都把他当做加密算法来使用,殊不知它只是一种编码而已,如果你用它来进行网络通讯加密,很容易被破解哦,切记,它不是加密算法。

Base64的由来

为什么叫Base64呢?因为它仅支持64位可打印字符(52位英文大小写字母,10位数字及+、/),如下图:

早期的传输协议,例如邮件SMTP只能传送可打印的ASCII码,导致原来8bit(0~255)超过了ASCII所表示的范围(ASCII共127个字符,0-31和127为控制字符或者通信专用(共33),32-126为可打印字符(共95)).假设我们通过邮件传输有个图片,其中有个byte的值为10111011,对应的10进制为187,超过了ASCII码的范围,传输则为乱码,图片则不能被正常解析和显示,就像我们用记事本打开图片一样,你总会看到乱码。

为此,Base64诞生了,用6位来表达原来的8位字符,把原本ASCII或者超出其范围的字符转换成可打印的字符。

那么如何解决8位字符和6位字符的转换呢(即Base64编码)

我们知道6和8的最小公倍数为24,嗯,我们可以用4个6位字符表示3个8位的字符了,如下图:

最终的8bit的字符Man转为了6bit的TWFu,此时有个问题,如果原本的8bit字符的总长度不是3的倍数怎么办?假设原8bit的字符总长度为32,在转为6bit时,还剩余2位,此时就直接在后四位补0,凑够36位,在Base64中,如果找不到匹配的Base64可打印字符,则用=表示。

如下图:[M ],转为Base64编码则为:TQ==

Base64解码

解码即编码的逆过程,此处不多讲了。

为啥不能用来加密

通过编码和解码我们知道任何人都可以将编码后的信息解码出完全一样的结果,也就起不到保密的效果了。

java中可用的工具

JDK1.8之后引入了Base64这个类,可以简单的通过这个工具类实现编码、解码工作。

除此之外Appche Commons Codec也提供了对应的工具类

c语言字符加密向后四位_Base64加密?它只是一种编码算法,切勿用来加密相关推荐

  1. 用java语言求前50个素数_Java求质数的几种常用算法总结

    Java求质数的几种常用算法分析 本文实例讲述了Java求质数的几种常用算法.分享给大家供大家参考,具体如下: 1.根据质数的定义求 质数定义:只能被1或者自身整除的自然数(不包括1),称为质数. 利 ...

  2. 每个c语言程序写完后 都要按照,c语言基础学习小结(习题总结)(5页)-原创力文档...

    书山有路勤为径 学海无涯苦作舟 一.思考题. 1.你如何向别人解释清楚什么是编程.什么是计算机语言? 2.什么是C语言? 二.解答题. 1.用C语言编写程序:求任意两个整数的和.如果是小数的话,要求输 ...

  3. c语言字符屏幕,C语言字符屏幕函数 - 编程资料 - Powered 万人网络编程学院 bcxy.yinese.com...

    Turbo C2.0的字符屏幕函数主要包括文本窗口大小的设定.窗口颜色的设置. 窗口文本的清除和输入输出等函数. 1.文本窗口的定义 Turbo C2.0默认定义的文本窗口为整个屏幕, 共有80列(或 ...

  4. C语言 | 字符数组

    C语言字符数组的定义 字符数组是用来存放字符数据的数组,字符数组中的一个元素存放一个字符,定义字符数组的方法和定义数值型数组的方法类似. //例子:char character[10]; C语言字符数 ...

  5. C语言学习一个月后感想

    C语言学习一个月后感想 感谢李晓东老板及计算机工程师联盟的学长学姐和某神秘同级同学的辛勤指导,感谢宋雨田的督促和陪伴. 初识C的1..体会 我本以为凭借瓜皮思维和花里胡哨操作可以让我熟练地学习语言,现 ...

  6. c语言字符型运算符,C语言试题:数据类型、运算符与表达式

    <C语言试题:数据类型.运算符与表达式>由会员分享,可在线阅读,更多相关<C语言试题:数据类型.运算符与表达式(4页珍藏版)>请在人人文库网上搜索. 1.3 数据类型.运算符与 ...

  7. c语言在数组输出字母,c语言字符数组与字符串的使用详解

    1.字符数组的定义与初始化字符数组的初始化,最容易理解的方式就是逐个字符赋给数组中各元素. char str[10]={ 'I',' ','a','m',' ','h','a','p','p','y' ...

  8. C/C++ | C语言字符数组初始化,有些赋值方式千万注意

    一.字符数组的定义和初始化 字符数组的初始化,最容易理解的方式就是逐个字符赋给数组中各元素. charstr[10]={'I','','a','m','','h','a','p','p','y'}; ...

  9. c语言字体移动函数,C语言字符函数、内存函数功能及实现代码

    C语言字符函数.内存函数 功能及实现 strlen函数(求字符串长度)注意点模拟实现 strcpy函数(字符串拷贝函数)注意点模拟实现 strcat函数(字符串衔接函数)注意点模拟实现 strcmp函 ...

最新文章

  1. 为什么做好数据安全这么难?黑客太牛?
  2. 华为云阳云计算外包给哪家公司的_长春作为东北中心,华为四大件已经配齐,绝了!...
  3. 再探ChannelPipeline 的初始化
  4. python (第二章)数据结构
  5. FCOS: A Simple and Strong Anchor-free Object Detector
  6. ulipad怎么运行python
  7. 中年男人的唯一出路就是安分守己
  8. emplace_back() 和 push_back 的区别:emplace_back效率高,避免push_back使用时所需的额外副本或移动操作
  9. 计算机考研408专用笔记-----计算机组成原理
  10. C语言-99乘法表-正倒三角
  11. 使用SHC命令工具加密Shell脚本
  12. 5 steps to autotools GNU diction
  13. php加密---六种加密方式
  14. 针对从 Apple 购买的 App 或内容申请退款
  15. C# 调用ffmpeg把rtsp视频流保存为MP4文件
  16. postgresql安装所需函数插件(比如加密函数hamc()函数使用)
  17. Retrofit的使用教程(一)
  18. TCL液晶电视换灯条的经历
  19. Android 签名证书生成及jks与keystore 相互转换
  20. TCP 与 SCTP

热门文章

  1. python棋类程序_python棋类游戏编写入门
  2. python celery应用场景_Celery使用背景与功能概要
  3. 智慧医院建设背景下的电子病历分析利用框架
  4. 新工科背景下的大数据体系建设探析
  5. 作者:姚登举(1980-),男,哈尔滨理工大学副教授。
  6. 【计算机科学基础】VonNeumann体系结构
  7. 【C语言】第三章 基本运算与顺序结构 题解
  8. Linux下使用ntpdate进行时间同步
  9. 让SH/BAT脚本定位到运行目录的相对位置,实现其脚本可在任意运行目录下被正确执行...
  10. 【VC编程技巧】窗口☞3.4利用bitmap改变对话框的背景。