相关文章推荐
儒雅的豆芽  ·  c++ std::map find ...·  1 年前    · 
瘦瘦的刺猬  ·  【Windows】【VS】error ...·  1 年前    · 
含蓄的机器猫  ·  Oracle分析函数 - 知乎·  1 年前    · 

置换密码/换位密码

置换密码(Permutation Cipher)又叫换位密码(Transposi-tionCipher),它根据一定的规则重新排列明文,以便打破明文的结构特性。置换密码的特点是 保持明文的所有字符不变 ,只是利用置换打乱了明文字符的 位置和次序
最常见的置换密码有两种:

  • 列置换密码(明文P遵照密钥的规程 按列换位 并且 按列读出序列 得到 密文 C);
  • 周期置换密码(将明文P按固定 长度m分组 ,然后对每组按1,2…,m的某个置换重排位置从而得到密文C)。
  1. 将明文P以设定的 固定分组宽度m 按行写出,即 每行有m个字符 。若明文长度不是m的整数倍,则 不足部分 用双方约定的方式 填充 ,如双方约定用空格代替空缺处字符,不妨设最后得字符矩阵 [M]_{m*n}
  2. 按1,2…,m的某一置换 \sigma 交换列的位置次序得字符矩阵 [M_P]_{m*n}
  3. 把矩阵 [M_P]_{m*n} 1,2…,n的顺序依次读出得密文序列C。

2022年北京冬季奥运会,英文为" The XXIV Olympic Winter Games ",假定m为5,发送时没有空格, \sigma=(143)(25)

1列内容换到4,4列内容换到3,3列内容换到1,2、5列互换。

明文: TheXXIVOlympicWinterGames

密文:eOitmXyWrsXlceeTImiGhVpna

加密密钥: \sigma=(143)(25)

  1. 将密文C按与加密过程相同的分组宽度m按列写得到字符矩阵 [M_P]_{m*n}
  2. 按加密过程用的置换 \sigma 的逆置换 \sigma^{-1} 交换列的位置次序得字符矩阵 [M]_{m*n}
  3. 把矩阵 [M]_{m*n} 按1,2,…,m 的顺序依次读出得明文P。

[M_P]_{5*5}=\begin{bmatrix} e& X & X & T &h \\ O& y & l & I & V\\ i& W &c & m & p\\ t& r & e & i & n\\ m&s&e&G&a \end{bmatrix}\stackrel{\sigma^{-1} }\Rightarrow [M]_{5*5}=\begin{bmatrix} T& h & e & X &X \\ I& V & O & l & y\\ m& p &i & c & W\\ i& n & t & e & r\\ G&a&m&e&s \end{bmatrix}
解密密钥: \sigma^{-1}=(134)(25)

周期置换密码是将明文串P按固定长度m进行分组,然后对每组中的子串按1,2…,m的某个置换重排位置从而得到密文C。其中密钥 \sigma 包含分组长度信息。解密时同样对密文C按长度m分组,并按口的逆置换 \sigma^{-1} 把每组子串重新排列位置从而得到明文P。

加密“State Key Laboratory of Networking and Switching",不含空格,m为6。加密密钥 \sigma =(15623)

明文分7组,每组6个:
(StateK)(eyLabo)(ratory)(ofNetw)(orking)(andSwi)(tching)

加密变换:
(akttSe)(Loyaeb)(tyaorr)(Nwfeot)(kgrion)(dinSaw)(hgcitn)

最终密文:
akttSeLoyaebtyaorrNwfeotkgriondinSawhgcitn

由加密密钥易知解密密钥: \sigma^{-1} =(13265),解密易实现,请读者自行尝试。

所谓代换,就是将明文中的一个字母由其它字母、数字或符号 替代 的一种方法。
代换密码是指 建立一个代换表 ,加密时将需要加密的明文依次通过 查表,替换为相应的字符 ,明文字符被逐个替换后,生成无任何意义的字符串,即密文。这样的 代换表,通常称为密钥。

单表代换密码

对明文消息中出现的同一个字母,在 加密时都使用同一固定的字母来代换 ,不管它出现在什么地方。如凯撒、仿射等。

明文中的所有字母都在字母表上向后(或向前)按照一个固定数目( 密钥n )进行偏移后被替换成密文。

加解密方法如下:

当密钥n是3时:

明文字母表:ABCDEFGHIJKLMNOPQRSTUVWXYZ。

密文字母表:DEFGHIJKLMNOPQRSTUVWXYZABC。

加密过程 如下:

明文:THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG ;

密文:WKH TXLFN EURZQ IRA MXPSV RYHU WKH ODCB GRJ。

解密逆过程即可,可以自己写个小程序,输入明文/密文、密钥,得到结果,当然,也有在线工具箱。

找的在线加解密工具箱,网址在参考部分

多表代换密码

明文消息中出现的同一个字母,在加密时 不是完全被同一固定的字母代换 ,而是根据其出现的位置次序,用不同的字母代换。多表代换密码是利用多个单表代替密码构成的密码体制,它在对明文进行加密的过程中依照密钥轮流使用多个单表代替密码。如维吉利亚、Playfair、转轮等。

维吉尼亚密码

是使用一系列凯撒密码组成密码字母表的加密算法,属于多表密码的一种简单形式。

假设明文为:

ATTACKATDAWN

选择某一关键词并重复而得到密钥,如关键词为LEMON时,密钥为:

LEMONLEMONLE

对于明文的第一个 字母A 对应密钥的 第一个 字母L ,于是使用表格中 L行字母表 进行加密,得到密文第一个 字母L 。类似地,明文第二个 字母T ,在表格中使用 对应的E行进行加密 ,得到密文第二个 字母X 。以此类推,即:

明文:ATTACKATDAWN

密钥:LEMONLEMONLE

密文:LXFOPVEFRNHR

解密过程相反

加解密在线工具-一个工具箱

千千秀字-维吉尼亚加解密

更多内容查看: 网络安全-自学笔记

喜欢本文的请动动小手点个赞,收藏一下,有问题请下方评论,转载请注明出处,并附有原文链接,谢谢!如有侵权,请及时联系。如果您感觉有所收获,自愿打赏,可选择支付宝18833895206(小于),您的支持是我不断更新的动力。

置换密码/huanweim 置换密码(Permutation Cipher)又叫换位密码(Transposi-tionCipher),它根据一定的规则重新排列明文,以便打破明文的结构特性。置换密码的特点是保持明文的所有字符不变,只是利用置换打乱了明文字符的位置和次序。 最常见的置换密码有二种: 列置换密码(明文遵照密钥的规程按列换位并且按列读出序列得到密文);周期置换密码(将明文P按固定长度m分组,然后对每组按1,2…,m的某个置换重排位置从而得到密文C)。... 置换密码 算法的原理是不改变明文字符,而是按照某一规则重新排列消息中的比特或字符顺序,才而实现明文信息的加密。 置换密码 有时又称为换位 密码 。 矩阵换位法是实现 置换密码 的一种常用方法。它将明文中的字母按照给定的顺序安排在一个矩阵中,然后用根据密钥提供的顺序重新组合矩阵中的字母,从而形成密文。例如,明文为attack begins at five,密钥为cipher,将明文按照每行6个字母的形式排在矩阵中,形成如下形式: 根据密钥cipher中各个字母在字母表中出现的先后顺序,给定一个 置换 : 根据上面的 置换 ,将原有居住中的字母按照第1列、第4裂、第5裂、第3裂、第2列、第6列的顺序排列,则有下面的形式: 从而得到密文:abatgftetcnvaiikse 其解密过程是根据密钥的字母数作为列数,将密文按照列、行的顺序写出,再根据由 密钥给出的矩阵 置换 产生新的矩阵,从而恢复明文。 2.C代表所有可能的密文组成的有限集。 3.K代表密钥空间,由所有可能的秘钥组成的有限集。 4.对于每一个k∈K,都存在一个加密规则ek∈E和相应的解密规则dk∈D。并且对每对ek:P→C,dk:C→P,满足条件:对每一个明文x∈P,均有dk(ek(x))=x。 ———————————————...
置换密码 又称换位 密码 ,是根据一定的规则重新排列明文,以便打破明文的结构特性。 置换密码 的特点是保持明文的 所有字符不变,只是利用 置换 打乱了明文字符的位置和次序。也就是说,改变了明文的结构,不改变明文的内容。 例如:明文:asdfghjklmnbvc 密钥:31524 首先把弄清密钥长度,然后将密文分组即 明文矩阵:       a s d f g      h j k l m 明文遵照密钥规则按列换位,按列读出明文序列得到密文。 加密:明文分段,不足则填充,根据密钥以列为单位进行互换,按行从左到右写出,得到密文。 解密:密文分段,根据密钥逆 置换 以列为单位进行互换,按行从左到右写出,得到明文。
置换密码 置换密码 算法的原理是不改变明文字符,只将字符在明文中的排列顺序改变,从而 实现明文信息的加密。 置换密码 有时又称为换位 密码 。 矩阵换位法是实现 置换密码 的一种常用方法。它将明文中的字母按照给的顺序安排 在一个矩阵中,然后用根据密钥提供的顺序重新组合矩阵中字母,从而形成密文。 #include<stdio.h> #include<string.h> #defin...
冰蝎动态二进制加密网站管理客户端 weevely3Weaponized web shell Altmanthe cross platform webshell tool in .NET Webshell SniperManage your website via terminal quasibotcomplex webshell manager, quasi-http botne...
跨站脚本攻击(全称Cross Site Scripting,为和CSS(层叠样式表)区分,简称为XSS)是指恶意攻击者在Web页面中插入恶意Script代码,当用户浏览网页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的目的。 xss是攻击客户端,最终受害者是用户,网站管理员也是用户之一。 xss漏洞通常是通过php的输出函数将javascript代码输出到html页面中,通过.
密码学 发展简史 1949年,Shannon发表了“保密系统的通信理论(Communication Theory of Secrecy Systems)”一文,为 密码学 的发展奠定了坚实的理论基础,于是, 密码 技术 的研究迈上了科学的轨道,因而从严格的意义上讲,此后的 密码 技术 才真正称得上 密码学 。 SSRF(Server-Side Request Forgery,服务器端请求伪造) 是一种由攻击者构造请求,由服务端发起请求的一个安全漏洞。一般情况下,SSRF是要目标网站的内部系统(因为他是从内部系统访问的,所以它能够请求到与它相连而与外网隔离的内部系统。)。 SSRF 形成的原因大都是由于服务端提供了从其他服务器应用获取数据的功能,且没有对目标地址做过滤与限制。比如从指定URL地址获取网页文本内容,加载指定地址的图片,文档等等。SSRF漏洞通过篡改获取资源的请求发送给服务器(服...
// 定义密钥表 char table[26] = {'Q', 'W', 'E', 'R', 'T', 'Y', 'U', 'I', 'O', 'P', 'A', 'S', 'D', 'F', 'G', 'H', 'J', 'K', 'L', 'Z', 'X', 'C', 'V', 'B', 'N', 'M'}; // 加密函数 void encrypt(char *plaintext, char *ciphertext) { int len = strlen(plaintext); for (int i = 0; i < len; i++) { if (plaintext[i] >= 'a' && plaintext[i] <= 'z') { ciphertext[i] = table[plaintext[i] - 'a']; else if (plaintext[i] >= 'A' && plaintext[i] <= 'Z') { ciphertext[i] = table[plaintext[i] - 'A']; else { ciphertext[i] = plaintext[i]; ciphertext[len] = '\0'; // 解密函数 void decrypt(char *ciphertext, char *plaintext) { int len = strlen(ciphertext); for (int i = 0; i < len; i++) { if (ciphertext[i] >= 'a' && ciphertext[i] <= 'z') { for (int j = 0; j < 26; j++) { if (table[j] == ciphertext[i]) { plaintext[i] = 'a' + j; break; else if (ciphertext[i] >= 'A' && ciphertext[i] <= 'Z') { for (int j = 0; j < 26; j++) { if (table[j] == ciphertext[i]) { plaintext[i] = 'A' + j; break; else { plaintext[i] = ciphertext[i]; plaintext[len] = '\0'; int main() { char plaintext[100]; char ciphertext[100]; char decryptedtext[100]; printf("请输入明文:"); fgets(plaintext, 100, stdin); encrypt(plaintext, ciphertext); printf("加密后的密文:%s\n", ciphertext); decrypt(ciphertext, decryptedtext); printf("解密后的明文:%s\n", decryptedtext); return 0; 在这个例子中,我们定义了一个密钥表,它包含了26个字母的替代字母。加密函数接收明文作为输入,并将其转换为密文。解密函数接收密文作为输入,并将其转换回明文。最后,我们在主函数中使用这些函数来加密和解密一段文字。