我经常听到人们谈论“64进制编码”。它的用途是什么?
当前回答
一个十六进制数字是一个啃位(4位)。两个小字节构成8位,也称为1字节。
MD5生成128位输出,该输出使用32个十六进制数字序列表示,这些十六进制数字依次为32*4=128位。128位等于16字节(因为1字节等于8位)。
每个Base64字符编码6位(除了最后一个非填充字符可以编码2,4或6位);以及最后的填充字符(如果有的话)。因此,根据Base64编码,128位哈希至少需要⌈128/6⌉= 22个字符,如果有的话再加上pad。
使用base64,我们可以生成所需长度(6、8或10)的编码输出。 如果我们选择8字符长的输出,它只占用8个字节,而128位哈希输出则占用16个字节。
因此,除了安全性之外,还使用base64编码来减少空间消耗。
其他回答
有些传输协议只允许传输字母数字字符。想象一下这样一种情况:控制字符用于触发特殊操作,或者每个字符只支持有限的位宽。Base64将任何输入转换为只使用字母数字字符、+、/和=作为填充字符的编码。
除了已经说过的,还有两种没有列出的非常常见的用法是
散列:
哈希是将一个字节块转换为另一个固定大小的字节块的单向函数,例如128bit或256bit (SHA/MD5)。将结果字节转换为Base64可以更容易地显示散列,特别是在比较完整性的校验和时。在Base64中经常看到哈希值,以至于许多人将Base64本身误认为是哈希值。
密码:
由于加密密钥不一定是文本,而是原始字节,因此有时需要将其存储在文件或数据库中,这在Base64中很方便。结果加密字节也是如此。
注意,尽管Base64经常用于密码学中,但它并不是一种安全机制。任何人都可以将Base64字符串转换回其原始字节,因此不应将其用作保护数据的手段,而应将其用作更容易显示或存储原始字节的格式。
证书
PEM格式的x509证书是base64编码的。http://how2ssl.com/articles/working_with_pem_files/
Base-64编码是一种获取二进制数据并将其转换为文本的方法,这样就更容易在电子邮件和HTML表单数据中传输。
http://en.wikipedia.org/wiki/Base64
Base64可以用于许多目的。
主要原因是将二进制数据转换为可通过的数据。
我有时用它来将JSON数据从一个站点传递到另一个站点,存储信息 在cookie中关于用户的信息。
注意: 你“可以”用它来加密——我不明白为什么人们说你不能,而且它不是加密,尽管它很容易被破解,而且不受欢迎。加密只不过是将一串数据转换为另一串数据,以后可以解密,也可以不解密,这就是base64所做的。
我要在这里描述的Base64的用法有点hack。所以如果你不喜欢黑客,请不要继续。
当我发现MySQL的utf8不支持4字节unicode字符时,我遇到了麻烦,因为它使用了3字节版本的utf8。那么我做了什么来支持完整的4字节unicode MySQL的utf8?base64在存储到数据库时编码字符串,在检索时解码字符串。
由于base64编码和解码非常快,上面的工作非常完美。
你需要注意以下几点:
Base64编码多使用33%的存储空间 存储在数据库中的字符串不是人类可读的(您可以将其作为数据库字符串使用基本加密形式的特性出售)。
对于任何不支持unicode的存储引擎,都可以使用上述方法。
推荐文章
- 如何将base64编码的映像保存到磁盘?
- 如何将Base64字符串转换为位图图像,以显示在一个ImageView?
- 用base64编码图像文件
- 如何在iOS上进行base64编码?
- URL方案/主机/路径中的“+”是否代表空格?
- HTML编码问题-显示“”字符而不是“ ”
- 在HTML中,我可以用✓做一个复选标记;. 有相应的x标记吗?
- 有人知道如何解码和编码Base64中的字符串使用Base64吗?
- 在UIImage和Base64字符串之间转换
- 如何检查一个字符串是否被Base64编码
- 如何保存一个PNG图像服务器端,从base64数据URI
- 如何存储自定义对象在NSUserDefaults
- 一个Unicode字符需要多少字节?
- 如何转换字符串和从UTF8字节数组在Java
- 如何确定文本的编码