编码的关键是"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;
}
这就是解码的功能。
答案 0 :(得分:0)
编码时,您的替换是编码键enc
中的简单查找:
cipher = enc[plain]
其中cipher
和plain
是从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的自然索引。我会留下那个汤姆。)