DES算法详解和代码 - IP置换

来源:互联网 发布:金坛网络维护维修电话 编辑:程序博客网 时间:2024/04/30 04:29
    DES算法,IP置换的功能是把输入的64位数据块按位重新组合,并把输出分为L0、R0两部分,每部分各长32位,其置换规则见下表:

58,50,42,34,26,18,10,2,60,52,44,36,28,20,12,4,62,54,46,38,30,22,14,6,64,56,48,40,32,24,16,8,57,49,41,33,25,17,9,1,59,51,43,35,27,19,11,3,61,53,45,37,29,21,13,5,63,55,47,39,31,23,15,7,

即将输入的第58位换到第一位,第50位换到第2位,...,依此类推,最后一位是原来的第7位。L0、R0则是换位输出后的两部分,L0是输出的左32位,R0 是右32位,例

如:设置换前的输入值为D1D2D3......D64,则经过初始置换后的结果为:L0=D58D50...D8;R0=D57D49...D7。

其典型C代码实现如下:
定义IP置换表如上表,char类型数组,长度为64;
然后,在从0到64循环,把源数组的数据按IP置换表的内容填到目的数组,即实现了IP置换;

// initial permutation (IP)const static char IP_Table[64] = {58, 50, 42, 34, 26, 18, 10, 2, 60, 52, 44, 36, 28, 20, 12, 4,62, 54, 46, 38, 30, 22, 14, 6, 64, 56, 48, 40, 32, 24, 16, 8,57, 49, 41, 33, 25, 17,  9, 1, 59, 51, 43, 35, 27, 19, 11, 3,61, 53, 45, 37, 29, 21, 13, 5, 63, 55, 47, 39, 31, 23, 15, 7};void DES_InitialPermuteData(char* src,char* dst){//IPint i=0;for(i=0;i<64;i++){dst[i] =src[IP_Table[i]-1];}}


0 0