如何从编码密钥(替换密码)C生成解码密钥

时间:2015-05-01 04:25:39

标签: c

编码的关键是"qwertyuiopasdfghjklzxcvbnm",这是您在程序中输入"abcdefghijklmnopqrstuvwxyz"时获得的代码。如何从中获取解码密钥。这是一个替代密码。如果您有任何建议,请保持简单并利用您拥有的变量。没有复杂的或任何库函数

    char * decodeSubstitution(char * lcEncodingKey, char * src, char * dest)
{
    char      lcDecodingKey[26];
    char      ucDecodingKey[26];





    char* deststart=dest;


    int i ;


    int offset1;
    int offset2;

    // Create the lower case decoding key from the lower case encoding key
    // (WRITE CODE HERE)
     for (i=0; i<26 ; i++){
     //    lcDecodingKey[i]=lcEncodingKey[i];
          lcDecodingKey[i]=

         ucDecodingKey[i]= toupper(lcDecodingKey[i]);
     }


    // Create the uppercase decoding
    // (WRITE CODE HERE)


    // Implementation of the generalized substitution decoder.
    // (WRITE CODE HERE)
    for (; *src; ++src, ++dest)
    {
      if (isupper(*src))
        {
            offset2=*src-'A';
            *dest=ucDecodingKey[offset2];

         }



         else if (islower(*src)){
              offset1 = *src - 'a';

       *dest = lcDecodingKey[offset1];
         } else{

             *dest=*src;
         }
    }
         *dest = '\0';

         return deststart;


}

这就是解码的功能。

1 个答案:

答案 0 :(得分:0)

编码时,您的替换是编码键enc中的简单查找:

cipher = enc[plain]

其中cipherplain是从a(0)到z(25)的小写字母的索引。解码时,解码密钥的另一种方式是dec

plain = dec[cipher]
      = dec[enc[plain]]

当然,dec[enc[plain]]必须映射到自身,您可以从编码密码创建解码密码,如下所示:

for (int i = 0; i < 26; i++) {
    dec[enc[i]] = i;
}

应该给你

enc: qwertyuiopasdfghjklzxcvbnm
dec: kxvmcnophqrszyijadlegwbuft 

为您的示例:如果您对c(索引2)进行编码,则它将变为e。如果您解码(或使用解码密钥对其进行编码),e(索引4)将再次成为c

(当然,您仍然必须将ASCII字符映射到0到25​​的自然索引。我会留下那个汤姆。)