这个密码算法如何工作?

时间:2014-04-25 04:03:57

标签: algorithm bash shell encryption

我被要求实施以下密码算法。加密有点模糊,但至少它有点意义,但我不知道解密是如何工作的! 正如它所说,对于解密,应该发生反向替换。正如您在此示例中看到的'白菜',如何知道b重复了两次或a之前已经发生过!也许有一些暗示我无法看到它或我在某处犯错误。
我从需求中拍摄了图像,所以我也可以向你展示这张桌子。感谢任何解释或算法。

enter image description here

2 个答案:

答案 0 :(得分:3)

这看起来像是家庭作业,所以我只是添加一些提示,它是如何工作的,没有实际的完整代码......

1.substitution

  • 首先将关键字转换为仅来自不同的字母
  • 删除之前使用的所有字母(2个嵌套循环将执行)

    cabbage -> cabge  // b,a removed
    
  • 现在制作字母替换表

    abcdefghijklmnopqrstuvwxyz // plain text alphabet(input unencrypted alphabet)
    -------------------------
    cabge                        // keyword
    ---d-f-hijklmnopqrstuvwxyz // unused letters
          dfhijklmnopqrstuvwxyz // unused letters merged together
    -------------------------
    cabgedfhijklmnopqrstuvwxyz // output text alphabet (output encrypted alphabet)
    

2.encryption

  • 只需阅读文字并将任何字母从未加密的字母转换为加密
  • 这样的事情:

    char enc[]="cabgedfhijklmnopqrstuvwxyz";
    char in,out;
    // loop for input text reading to in
    out=enc[int(in-'a')];
    // and writing back out
    

3.decryption

  • 创建解密字母表

    abcdefghijklmnopqrstuvwxyz // plain text alphabet
    cabgedfhijklmnopqrstuvwxyz // enc table
    // now find the letter for decryption in enc and write the plain text value at the same position
    // a->b, b->c, c->a ... z->z also 2 nested loops will do it
    abcdefghijklmnopqrstuvwxyz // plain text alphabet
    bcafegdhijklmnopqrstuvwxyz // dec table
    
  • 现在以与加密相同的方式解密,只使用dec表而不是enc

    char dec[]="bcafegdhijklmnopqrstuvwxyz";
    char in,out;
    // loop for input text reading to in
    out=dec[int(in-'a')];
    // and writing back out
    

[注释]

  • 不要忘记添加if来处理'a'之外的字母 - 'z'

答案 1 :(得分:2)

您的任务是使用简单的替换密码。要加密文本,请查找第一行中的每个字符,并替换为第二行中的字符,因此a-> c,b-> a,c-> b等。要解密文本,请查找每个字符第二行中的字符,并将其替换为第一行中的字符,因此a-> b,b-> c,c-> a等等。正如devnull指出要查找的命令是{{ 1}}。你的作业中的例子(?)可以通过

来实现
tr

要构建表,您需要计算第二行(第一行始终是a-z)。至于我将解释任务你开始关键字并删除第一个字符,但第一个,所以tr abcdefghijklmnopqrstuvwxyz cabgedfhijklmnopqrstuvwxyz # encryption tr cabgedfhijklmnopqrstuvwxyz abcdefghijklmnopqrstuvwxyz # decryption 变为abcadcabcd变为rlxxdllllq。这些字符构成表格第二行的开头。您现在按字母顺序填充字母表中的剩余字符。因此,您可以通过将单一化关键字与从rlxdq ... tr中删除的单一化关键字字符的结果相连接来获得abcd的第二个单词。由于xyz还具有删除功能,因此这应该很简单。