本文已参与「新人创作礼」活动, 一起开启掘金创作之路。
Base64
介绍
Base64 不是加密算法,其属于可读性算法,或做数据验证使用。它是基于64个可打印的字符来表示二进制的数据的一种方法。
Base64 由64个字符组成包括 A-Z、a-z、0-9、+、/;对应的还有 Base58,常用于比特币中。Base58 里无数字 0、小写o、大写|、小写i、+、/
原理
假如要编码一个非二进制字符,Base64的编码规则是先把这个字符处理成二进制,然后**每连续6个bit [0, 63]**计算其十进制,得出十进制的值之后,再根据Base64对照表找到对应的字符。
如果原始字符不是3的倍数,该如何处理?
在原数据尾部补充0,直到补够3的倍数(1 byte = 8 bit,8n的3倍可被6整除)。为防止最后因补齐出现的 A 字符被错误识别为数据,我们用 = 来替换补齐字符,所以在 Base64中 = 也叫结束符号。
MD5
MD5算法是典型的消息摘要算法,它是由 MD4,MD3 和 MD2 算法演变而来。无论是哪一种 MD 算法,其原理都是接受一个任意长度的消息并产生一个 128 位的消息摘要。如果把得到的消息摘要转换成十六进制字符串,则会得到一个32字节长度的字符串,我们平常见到的大部分MD数字指纹就是一个长度为32的十六进制字符串。
原理
- 填充
在MD5算法中,首先需要对输入信息进行填充,使其位长对512求余的结果等于448,并且填充必须进行,即使其位长对512求余的结果等于448。因此,信息的位长(Bits Length)将被扩展至N*512+448(填充数据长度在[1, 512]之间),N为一个非负整数,N可以是零。方法如下:
- 在信息的后面填充一个1和无数个0,直到满足上面的条件时才停止用0对信息的填充。
- 在这个结果后面附加一个以64位二进制表示的填充前信息长度(单位为Bit),如果二进制表示的填充前信息长度超过64位,则取低64位。
-
标准幻数定义
现定义四个标准幻数如下:
- A = 01 23 45 67
- B = 89 ab cd ef
- C = fe dc ba 98
- D = 76 54 32 10
在计算机中存储时,采用小端存储方式,以A为例,A在Java中初始化的代码为为A=0x67452301
RSA
- 选择p、q两个超级大的质数,都是1024位。
- 令n=p∗q。取φ(n)=(p−1)∗(q−1)。计算与n互质的整数的个数。
- 取e∈{1<e<φ(n)},(n,e)作为公钥对。正式环境中取65537,依据来源于HTTP证书。
- 令ed mod φ(n) = 1,计算d,(n,d)作为私钥对。计算d可以利用扩展欧几里的算法进行计算,非常简单。
- 销毁p、q。密文 = 明文^e mod n,明文 = 密文^d mod n。