加解密算法

@think3r 2023-03-09 10:38:13

  1. Base64编码详解
  2. 写给开发人员的实用密码学(一)—— 概览

硬件加速情况 :

  1. cat /proc/cpuinfo, 可看到现代 CPU 大多都支持了对 AES/CRC32/SH1 等算法的指令集加速.
  2. $NDK_ROOT/sources/android/cpufeatures

0x00 Base64

  1. 简介 : Base64,顾名思义,就是包括小写字母 a-z、大写字母 A-Z、数字 0-9、符号 “+”、”/” 一共 64 个字符的字符集,(另加一个 “=”,实际是 65 个字符,至于为什么还会有一个 “=”,这个后面再说)。任何符号都可以转换成这个字符集中的字符,这个转换过程就叫做 base64 编码。
  2. 转换方式 : 首先将字符串(图片等)转换成二进制序列,然后按每 6 个二进制位为一组,分成若干组,如果不足 6 位,则低位补 0。每6位组成一个新的字节,高位补 00,构成一个新的二进制序列,最后根据 base64 索引表中的值找到对应的字符。
  3. 使用场景 :
    1. html 中的图片用 base64 表示 : 减少一次 http 请求
    2. 邮件传输一些二进制
  4. 原因 : 有些情况下传输不可见字符不方便。比如一个纯文本协议,二进制中可能会出现被当做控制字符处理的部分。这样引起传输失败。
    • 常见的诸如 http 协议的 url 就是纯文本的,不能直接放二进制流。
      • http 虽然也是纯文本协议,但是 http 有针对二进制数据做特殊的规定(mime),所以用 http 直接传输二进制数据是可行的。
    • 大多数现代语言的 String 类型,都不能直接储存二进制流,但可以储存 base64 编码的字符串。如果你希望用 String 类型操作一切数据,那就没法直接用二进制流。
    • 某些协议会对二进制流中的特定字符进行特殊处理(比如 ASCII 的 0~32 编码的字符在某些传输介质中,是会被当作特殊含义处理的),这种时候就需要通过编码来避开这些特定字符了。
  5. base64 不是加密算法,他只是一种编码方式,数据从一种形式转换为另一种形式进行传输/存储。

0x01 AES