网工干货知识

超全学习笔记
当前位置:首页 > 干货知识

Autokey Cipher | 对称密码

更新时间:2026年03月27日   作者:spoto   标签(Tag):

Autokey Cipher是一种用于加密消息的方法,其目的是确保这些消息能够保持机密性。 它使用某个关键词来启动该过程。不过,与其重复那个关键词,不如将实际消息中的字母也合并到这个关键词中。 这样一来,那些试图在不了解密钥的情况下解码该消息的人就会面临更大的困难。 消息中的每个字母都会根据这个组合密钥中的字母进行移位。 因此,Autokey Cipher提供的安全性要优于那些仅依赖固定关键词的简单加密方法。 在本文中,我们将了解Autokey Cipher的工作原理以及它的使用示例。

什么是Autokey Cipher呢?

Autokey加密工具就是如此而已。多字母替换密码这种加密方式使用了关键字以及部分明文信息来生成用于加密和解密的密钥流。它与Vigenere密码法有相似之处,但生成密钥的方法有所不同。这种加密方法是由Blaise de Vigenère在1586年发明的。总体来说,这种加密方法的安全性比传统的加密方法要高一些。维吉纳密码.

Autokey加密工具

示例1:

明文 = “HELLO”  自动加密方式 = 否  密文 = “ULPWZ”

示例2:

明文 = “GEEKSFORGEEKS”  自动加密算法 = P  密文 = “VKIOCXTFXKIOC”

在这个……密文关键在于,有一个子密钥流被用来对明文中的相应字符进行加密。如所示,AutoKey被添加到了子键的第一个位置。

让我们来解释一下示例1:给定的明文是:H E L L O  密钥是:N H E L LLet’s Encrypt:明文:H   E   L   L   O  对应的数字:7   4   11  11  14     密钥:N   H   E   L   L  对应的数字:13  7   4   11  11       应用公式后得到的密文为:20  11  15  22  25  密文对应的字母为:U    L   P   W   Z  因此, ciphertext就是:U L P W ZULPWZ让我们来解密吧:密文(C):U L P W Z  密钥(K):N H E L L  -------------------  根据公式:H E L L O  因此,明文为:你好

以下是用于Autokey Cipher的Java代码。

Java
// 一个用于演示的 Java 程序// 自动密钥加密技术// 导入所需的库文件进口java.lang.*;进口java.util.*;公共的类别/分类 AutoKey{私人的静态的最终/最后字符串字母表=“ABCDEFGHIJKLMNOPQRSTUVWXYZ”;公共的静态的无效/无意义主要/核心(字符串[]参数/变量){字符串消息/信息=“HELLO”;字符串关键/重要事项=“N”;// 这个 if 语句与 Java 中的正则表达式有关。// [] 用于定义范围// // 使用 “\” 来表示反斜杠。// “\\d”用作分隔符。// 是否应该这样做呢?还是完全不要这么做吧。//。任何字符都可以(这些字符可能与行结束符相匹配,也可能不匹配)。if(关键/重要事项.匹配/符合([-+]?\\d*\\.?\\d+))关键/重要点=""+字母表.charAt(整数.parseInt(关键/重要点));字符串enc=自动加密(消息/信息,关键/重要事项);系统/体系.外出/离开.println(明文:+消息/信息);系统/体系.外出/离开.println(加密状态:+enc);系统/体系.外出/离开.println(已解密:“+自动解密(enc,关键/重要事项));}公共的静态的字符串自动加密(字符串消息/信息,字符串关键/重要点){整数长度=消息/信息.长度();// 生成密钥流字符串新密钥=关键/重要事项.连接(消息/信息);新密钥=新密钥.子字符串(0,新密钥.长度()-关键/重要点.长度());字符串加密消息="";// 应用加密算法为了(整数x=0;x<长度;x++){整数首先=字母表.索引位置(消息/信息.charAt(x));整数第二=字母表.索引位置(新密钥.charAt(x));整数总数=(首先+第二)%26;加密消息+=字母表.charAt(总数);}返回加密消息;}公开的静态的字符串自动解密(字符串消息/信息,字符串关键/重要事项){字符串当前密钥=关键/重要事项;字符串解密消息="";// 应用解密算法为了(整数x=0;x<消息/信息.长度();x++){整数get1=字母表.索引位置(消息/信息.charAt(x));整数get2=字母表.索引位置(当前密钥.charAt(x));整数总计=(get1-get2)%26;总计=(总数<0)?总数+26:总计;解密消息+=字母表.charAt(总计);当前密钥+=字母表.charAt(总计);}返回解密消息;}}
C#
// 一个C#程序,用于演示/说明// 自动密钥加密技术使用系统/体系;使用System.Text.RegularExpressions;公共的类/类别AutoKey{私人的静态的字符串字母表=“ABCDEFGHIJKLMNOPQRSTUVWXYZ”;公开的静态的无效/无意义主要/核心内容(字符串[]参数/变量){字符串消息/信息=“HELLO”;字符串关键/重要事项=“N”;// 这个 `if` 语句与 C# 中的正则表达式有关。// 表达式// [] 用于定义范围// // 使用 “\” 来表示反斜杠。// “\\d”用作分隔符。// 是否只执行一次,还是根本就不执行。//。任何字符都可以使用(可能匹配,也可能不匹配行的内容)。// 终止符)正则表达式w=新的正则表达式([-+]?d*.?d+);if(w.是否匹配(关键/重要事项))关键/重要事项=""+字母表[Int32.解析(关键/重要点)%26];字符串enc=自动加密(消息/信息,关键/重要事项);控制台.WriteLine(明文:+消息/信息);控制台.WriteLine(加密状态:+enc);控制台.WriteLine(已解密:“+自动解密(enc,关键/重要事项));}公开的静态的字符串自动加密(字符串消息/信息,字符串关键/重要点){整数长度=消息/信息.长度;// 生成密钥流字符串新密钥=关键/重要点+消息/信息;新密钥=新密钥.子字符串(0,新密钥.长度-关键/重要点.长度);字符串加密消息="";// 应用加密算法为了(整数x=0;x<长度;x++){整数首先=字母表.索引值(消息/信息[x]);整数第二=字母表.索引值(新密钥[x]);整数总数=(首先+第二)%26;加密消息+=字母表[总数];}返回加密消息;}公共的静态的字符串自动解密(字符串消息/信息,字符串关键/重要点){字符串当前密钥=关键/重要点;字符串解密消息="";// 应用解密算法为了(整数x=0;x<消息/信息.长度;x++){整数get1=字母表.索引值(消息/信息[x]);整数get2=字母表.索引值(当前密钥[x]);整数总计=(get1-get2)%26;总数=(总计<0)?总计+26:总计;解密消息+=字母表[总数];当前密钥+=字母表[总计];}返回解密消息;}}// 这段代码是连续的。
              马上抢免费试听资格
意向课程:*必选
姓名:*必填
联系方式:*必填
QQ:
思博SPOTO在线咨询

相关资讯

即刻预约

免费试听-咨询课程-获取免费资料