伪加密算法:Base64

作者 : 开心源码 本文共1521个字,预计阅读时间需要4分钟 发布时间: 2022-05-12 共195人阅读

做过网络通信的iOSer对Base64都不会很陌生,涉及加密的数据通常会在传输之前做一次Base64转换,一般形式如下Base64(DES/AES(Data)),所以有些iOSer就把Base64当作加密算法的一种,甚至少量在线工具也直接称呼Base64为加密/解密,实际上这误解可大了,本篇答复以下三个问题:

  1. Base64为什么不是一种加密算法?
  2. 假如不是加密算法,Base64有什么用?
  3. iOS开发中如何使用Base64

Base64编码过程

要答复第一个问题,首先来看看Base64的编码过程,这里以字符串 “1234”为例,经过Base64编码后,结果为"MTIzNA==",也是一个字符串,过程如下:

Base64编码过程
可见,经过6位分组后,原字符串已经被另一组字符替换,转换后的数值不是与ASCII码做对应,而是与Base64码表[A~Za~z0~9+/]的下标对应,恰好为64个字符。
理解了编码过程,解码就很容易了,按编码过程,反向运算,就能得到原始字符串,因为Base64的算法是公开的,任何人理解算法后,可以毫无障碍的取得原始信息,所以说Base64是种加密算法实在是一种误会。

Base64的作用

看到这里,你会疑问,这样的编码有什么用?
Base64真正的作用不是将字符串转换为另一个字符串,而是将任意二进制转换为字符串,这个字符串的范围还很小,只有64个,这就为那些只能传输字符串的协议传输数据带来方便,比方http,通过少量字符的替换,还可以避免特殊字符的冲突。

iOS中使用Base64

苹果已经提供了原生的API,用Swift做Base64编码:

import Foundationlet str = "1234"let utf8str = str.data(using: String.Encoding.utf8)let base64Encoded = utf8str?.base64EncodedString(options: NSData.Base64EncodingOptions.init(rawValue: 0))

NSData.Base64EncodingOptions 有四个可选值:

作用
lineLength64Characters编码结果按照64个字符长度进行等分换行,默认换行符为\r\n
lineLength76Characters编码结果按照76个字符长度进行等分换行
endLineWithCarriageReturn编码结果换行时使用回车符\r
endLineWithLineFeed编码结果换行时使用回车符\n

可以组合使用:

NSData.Base64EncodingOptions.init(rawValue: NSData.Base64EncodingOptions.lineLength76Characters.rawValue | NSData.Base64EncodingOptions.endLineWithCarriageReturn.rawValue)

编码结果按76个字符换行,换行符为\r。

解码方法如下:

let decodedData = NSData(base64Encoded: base64Encoded!, options: NSData.Base64DecodingOptions.init(rawValue: 0))let decodedString = NSString(data: decodedData! as Data, encoding: String.Encoding.utf8.rawValue)! as String

思考题:
编码过程中,6位补8位的规则是什么,是高位补0还是低位,为什么?经过深入思考的结果才是自己的哦,欢迎你的留言??

说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » 伪加密算法:Base64

发表回复