架构师训练营第 1 期 week11 总结
关于加密算法的原理:
1、单向散列加密算法:如MD5
MD5以512位分组来处理输入的信息,且每一分组又被划分为16个32位子分组,经过了一系列的处理后,算法的输出由四个32位分组组成,将这四个32位分组级联后将生成一个128位散列值。
在MD5算法中,首先需要对信息进行填充,使其字节长度对512求余数的结果等于448。因此,信息的字节长度(Bits Length)将被扩展至N*512+448,即N*64+56个字节(Bytes),N为一个正整数。填充的方法如下,在信息的后面填充一个1和无数个0,直到满足上面的条件时才停止用0对信息的填充。然后再在这个结果后面附加一个以64位二进制表示的填充前的信息长度。经过这两步的处理,现在的信息字节长度=N*512+448+64=(N+1)*512,即长度恰好是512的整数倍数。这样做的原因是为满足后面处理中对信息长度的要求。MD5中有四个32位被称作链接变量(Chaining Variable)的整数参数,他们分别为:A=0x01234567,B=0x89abcdef,C=0xfedcba98,D=0x76543210。当设置好这四个链接变量后,就开始进入算法的四轮循环运算,循环的次数是信息中512位信息分组的数目。
将上面四个链接变量复制到另外四个变量中:A到a,B到b,C到c,D到d。主循环有四轮(MD4只有三轮),每轮循环都很相似。第一轮进行16次操作。每次操作对a、b、c和d中的其中三个作一次非线性函数运算,然后将所得结果加上第四个变量(文本中的一个子分组和一个常数)。
再将所得结果向右环移一个不定的数,并加上a、b、c或d中之一。最后用该结果取代a、b、c或d中之一。以一下是每次操作中用到的四个非线性函数(每轮一个)。
其中,?是异或,∧是与,∨是或,是反符号。
如果X、Y和Z的对应位是独立和均匀的,那么结果的每一位也应是独立和均匀的。F是一个逐位运算的函数。即,如果X,那么Y,否则Z。函数H是逐位奇偶操作符。所有这些完成之后,将A,B,C,D分别加上a,b,c,d。然后用下一分组数据继续运行算法,最后的输出是A,B,C和D的级联。最后得到的A,B,C,D就是输出结果,A是低位,D为高位,DCBA组成128位输出结果。
2、对称加密算法:如AES
参考链接 https://blog.csdn.net/gulang03/article/details/81175854
3、非对称加密算法:如RSA
参考连接 https://blog.csdn.net/ws_kfxd/article/details/86426306
关于布隆过滤器:
原理:首先需要n个哈希函数,每个哈希函数可以把指定的key散列成一个整数;
初始化一个数组,每个索引对应的值都是0;
加入某个key时,将其对应的n个散列值对应的位置设置为1;
判断某个key是否存在时,判断其对应的n个散列值对应的位置的值是否全部为1,如果不是则不存在;
优点:不需要存具体的key值,可以用有限的空间存储更多的数据;
缺点:只能严格的确定某个key不存在,但不能保证肯定存在;
无法删除;
应用范围:过滤邮箱黑名单、reids中验证某些key是否存在而不需要取值;
评论