S-DES 算法详解 其实跟上一篇一样,这还是网络安全的作业… S-DES 是DES 算法的简化版,并没有什么实际使用的价值,只用于教学来理解DES算法的加密方法,这篇文章就是按照S-DES 的算法来实际加密和解密的一段2 进制数,演示了加密的运算过程. 下面从准备知识开始 先讲一下置换,举例说明,对”ABCDEFGH”做一下”82641753″置换的结果就是”HBFDAGEC”,这样就能看懂是怎么置换的了吧. 然后是循环移位,继续举例,”ABCDEFGH”循环左移 2 位结果就是”CDEFGHAB”. 还有个 S 盒的替代选择,具体到 S-DES 来说就是输入的四位数”ABCD”在 S 盒中找第 AD 行 BC 列的数字作为输出,比如 0101 输入 S0(见下)的话就是第 1(01)行第2(10)列(0-3 行,0-3 列),输出为 1 即 01,再比如 1001 输入 S0 的话就是第 3(11)行第 0(00)列,输出为 3 即 11. 最后是按位异或,举例的话 1^1=0,1^0=1,0^1=1,0^0=0,1100^1010=0110,其实这个大家都懂吧. 好了,准备知识就这么多,下面开始正题: S-DES 算法的输入是一个 8 位的明文或者密文组和一个 10 位的密钥,输出是一个 8 位的密文或者明文组。 以下是S-DES 所需的几个置换表 P10 {3,5,2,7,4,10,1,9,8,6} P8 {6,3,7,4,8,5,10,9} 注意这个置换选择输入 10 位输出 8 位 P4 {2,4,3,1} IP {2,6,3,1,4,8,5,7} IPI {4,1,3,5,7,2,8,6} EP {4,1,2,3,2,3,4,1} 注意这个是扩展置换,输入 4 位输出 8 位 以下是两个 S 盒 S0: {1,0,3,2}, {3,2,1,0}, {0,2,1,3}, {3,1,3,2}, S1: {0,1,2,3}, {2,0,1,3}, {3,0,1,0}, {2,1,0,3}, 接下来就是加密和解密算法 首先讲子密钥的生成,子密钥在加密和解密算法中都有使用. 10 位密钥 key = 01111 11101 对key 做P10 置换得到 11111 10011 记左半(高位)的为Lk=11111,右半(低位)为Rk=10011 Lk 和Rk 均循环左移1 位,得到Lk=11111,Rk=00111 对Lk 和Rk 组合得到的11111 00111 做P8 置换选择,得到子密钥K1=0101 1111 Lk 和Rk 均再次循环左移2 位,得到Lk=11111,Rk=11100 对Lk 和Rk 组合得到的11111 11100 做P8 置换选择,的到子密钥K2=1111 1100 以上,通过密钥得到了算法所需的子密钥. 下面是加密过程 首先是初始置换 对明文m=0001 0110 做IP 置换,得m’=0100 1001 接下来是标准的Feistel 密码结构,共有两次循环 第一次循环 记左半(高位)为Lm=0100,右半(低位)为Rm=1001 对Rm ...