C S-DES实现:如何处理单个位?

C S-DES实现:如何处理单个位?,c,algorithm,encryption,bit-manipulation,des,C,Algorithm,Encryption,Bit Manipulation,Des,我有一个任务要求我们实现S-DES(简化DES),该算法包括很多位置换、移位以及异或运算 显然,实现这一点的最快方法是使用位操作,例如: char CLS(char key, int shift){ char skey; skey = (key << shift) | (key >> (8 - shift)) return skey; } /* Get 8-bit subkey from 10-bit key */ char permute(s

我有一个任务要求我们实现S-DES(简化DES),该算法包括很多位置换、移位以及异或运算

显然,实现这一点的最快方法是使用位操作,例如:

char CLS(char key, int shift){
    char skey;
    skey = (key << shift) | (key >> (8 - shift)) 
    return skey;
}

/* Get 8-bit subkey from 10-bit key */
char permute(short int key){
    short int i;
    short int k1[] = { BIT_6, BIT_3, BIT_7, BIT_4, BIT_8, BIT_5, BIT_10, BIT_9 }; // SDES spec
    char sk1 = '\0';

    for(i = 0; i < 8; i++){
        sk1 = (sk1 << 1) | (key & k1[i]);
    }
}

...
char-CLS(字符键,int-shift){
查尔斯凯;
skey=(键>(8-移位))
返回斯凯;
}
/*从10位键获取8位子键*/
字符排列(短整数键){
短int-i;
short int k1[]={BIT_6,BIT_3,BIT_7,BIT_4,BIT_8,BIT_5,BIT_10,BIT_9};//SDES规范
字符sk1='\0';
对于(i=0;i<8;i++){

sk1=(sk1如果你想加速你的算法,你可以在字节数组上并行加密,例如使用OpenMP。正如DarkSquirrel42在评论中指出的,为了提高速度,你还应该用一个使用查找表的函数替换你的permute函数:

#define LUT_SIZE 1024
static char lookup_table[LUT_SIZE];

/* Get 8-bit subkey from 10-bit key */
char permute(short int key)
{
    // SDES spec
    short int k1[] = { BIT_6, BIT_3, BIT_7, BIT_4, BIT_8, BIT_5, BIT_10, BIT_9 }; 
    char sk1 = '\0';

    for (short int i = 0; i < 8; i++) {
        sk1 = (sk1 << 1) | (key & k1[i]);
    }
    return sk1;
}

void init_lut()
{
    for (short int i = 0; i < LUT_SIZE; i++) {
        lookup_table[i] = permute(i);
    }
}

char permute_fast(short int key)
{
    if (key < 0 || key >= LUT_SIZE) {
        //error handling
        return 0;
    }
    return lookup_table[key];
}
#定义LUT_大小1024
静态字符查找_表[LUT_大小];
/*从10位键获取8位子键*/
字符排列(短整数键)
{
//SDES规范
短int k1[]={BIT_6,BIT_3,BIT_7,BIT_4,BIT_8,BIT_5,BIT_10,BIT_9};
字符sk1='\0';
对于(短int i=0;i<8;i++){
sk1=(sk1=LUT\U大小){
//错误处理
返回0;
}
返回查找表[键];
}

考虑更换您的permute()具有预计算可查找功能的函数…10位…1024个条目…无论您得到什么答案,我都会注意到过早的优化。也许最好先根据规范实现它,然后再添加优化。让它工作,让它正确,让它优化。注意!感谢您的帮助说明。