Ⅰ 换位密码的加密方法
加密换位密码通过密钥只需要对明文进行加密,并且重新排列里面的字母位置即可。具体方法如下
1、基于二维数组移位的加密算法
给定一个二维数组的列数,即该二维数组每行可以保存的字符个数。再将明文字符串按行依次排列到该二维数组中。最后按列读出该二维数组中的字符,这样便可得到密文。
2、换位解密算法(基于二维数组移位的解密算法)
先给定一个二维数组的列数,即该二维数组每行可以保存的字符个数,并且这个数应该和加密算法中的一致。接下来将密文字符串按列一次性排列到该二维数组中。最后按行读出该二维数组中的字符即可。
3、换位加密算法
首先按照密钥排列顺序:将想要加密的明文加密,然后列出表格,找出对应的字母,就是密钥。然后对他们进行换位加密,就是将表格的第二行依据密钥排列顺序进行排序以便得到加密后的密文。
(1)隔一位加密扩展阅读
数据加密技术的分类
1、专用密钥
又称为对称密钥或单密钥,加密和解密时使用同一个密钥,即同一个算法。单密钥是最简单方式,通信双方必须交换彼此密钥,当需给对方发信息时,用自己的加密密钥进行加密,而在接收方收到数据后,用对方所给的密钥进行解密。当一个文本要加密传送时,该文本用密钥加密构成密文,密文在信道上传送,收到密文后用同一个密钥将密文解出来,形成普通文体供阅读。
2、对称密钥
对称密钥是最古老的,一般说“密电码”采用的就是对称密钥。由于对称密钥运算量小、速度快、安全强度高,因而如今仍广泛被采用。它将数据分成长度为64位的数据块,其中8位用作奇偶校验,剩余的56位作为密码的长度。首先将原文进行置换,得到64位的杂乱无章的数据组,然后将其分成均等两段;第三步用加密函数进行变换,并在给定的密钥参数条件下,进行多次迭代而得到加密密文。
3、公开密钥
又称非对称密钥,加密和解密时使用不同的密钥,即不同的算法,虽然两者之间存在一定的关系,但不可能轻易地从一个推导出另一个。非对称密钥由于两个密钥(加密密钥和解密密钥)各不相同,因而可以将一个密钥公开,而将另一个密钥保密,同样可以起到加密的作用。公开密钥的加密机制虽提供了良好的保密性,但难以鉴别发送者,即任何得到公开密钥的人都可以生成和发送报文。
4、非对称加密技术
数字签名一般采用非对称加密技术(如RSA),通过对整个明文进行某种变换,得到一个值,作为核实签名。接收者使用发送者的公开密钥对签名进行解密运算,如其结果为明文,则签名有效,证明对方的身份是真实的。数字签名不同于手写签字,数字签名随文本的变化而变化,手写签字反映某个人个性特征,是不变的;数字签名与文本信息是不可分割的,而手写签字是附加在文本之后的,与文本信息是分离的。
Ⅱ 位加密(或移位加密)代码怎么样写
char getkey(char txt) { char e = "dfwkekgodsfdfwkdsf";//一定位数的字符串,比如32位 int ctr=0; char tmp = ''; for (int i=0;i<strlen(txt);i++) { if (ctr == strlen(e)) ctr=0;//当ctr长度为上面 e 的长度时,重新置为0 tmp += substr(txt,i,i+1) ^ substr(e,ctr,ctr+1);//将 txt的第i个字符 与 e 的第 ctr个字符 异或运算 并添加入 tmp字串中 ctr++;// ctr 自增 } return tmp;//返回得到的tmp字串 } char encrypt(txt) { srand((double)microtime()*1000000);//设置时间种子 char encrypt_key = md5(rand(0,32000));//得到32为加密字串; 这里目的就是每次运行时得到的字串都不一样 int ctr=0; int tmp = ""; for (int i=0;i<strlen(txt);i++) { if (ctr==strlen(encrypt_key)) ctr=0; tmp += substr(encrypt_key,ctr,ctr+1) . (substr(txt,i,i+1) ^ substr(encrypt_key,ctr,ctr+1)); ctr++; } return getkey(tmp); } char decrypt(txt) { char txt = getkey(txt); char tmp = ""; for (int i=0;i<strlen(txt);i++) { md5st = substr(txt,i,i+1); i++; tmp += (substr(txt,i,i+1) ^ md5st); } return tmp; }
Ⅲ C++输入一个4位数,将其加密为另一个4位数。加密原则为:每个位 * 7 % 10
//求c语言编程大神出手相救:输入一个三位数,将其加密后输出。
//加密方法使对该数的每一位数字,将其加6除以10取余数,
//作为该位上的新数字,再交换个位数字和百位数字,如输入256加密后的数为218。
#include<stdio.h>
main()
{
int
number=0;
int
i=0;
int
t=0;
int
spilt[3];
printf("输入一个三位数");
scanf("%d",&number);
for(i=0;i<3;i++)
{
spilt[i]=(number%10+6)%10;
number=number/10;
}//把拆分后的数字存入spilt数组
for(i=0;i<3;i++)
{
printf("%d",spilt[i]);
}
printf("\n");
}
Ⅳ 世界上各种密码的形式
1、二方密码:
二方密码(en:Two-square_cipher)比四方密码用更少的矩阵。
得出加密矩阵的方法和四方密码一样。
例如用“example”和“keyword”作密匙,加密lp。首先找出第一个字母(L)在上方矩阵的位置,再找出第二个字母(P)在下方矩阵的位置:
E X A M P
L B C D F
G H I J K
N O R S T
U V W Y Z
K E Y W O
R D A B C
F G H I J
L M N P S
T U V X Z
在上方矩阵找第一个字母同行,第二个字母同列的字母;在下方矩阵找第一个字母同列,第二个字母同行的字母,那两个字母就是加密的结果:
E X A M P
L B C D F
G H I J K
N O R S T
U V W Y Z
K E Y W O
R D A B C
F G H I J
L M N P S
T U V X Z
help me的加密结果:
he lp me
HE DL XW
这种加密法的弱点是若两个字同列,便采用原来的字母,例如he便加密作HE。约有二成的内容都因此而暴露。
2、四方密码
四方密码用4个5×5的矩阵来加密。每个矩阵都有25个字母(通常会取消Q或将I,J视作同一样,或改进为6×6的矩阵,加入10个数字)。
首先选择两个英文字作密匙,例如example和keyword。对于每一个密匙,将重复出现的字母去除,即example要转成exampl,然后将每个字母顺序放入矩阵,再将余下的字母顺序放入矩阵,便得出加密矩阵。
将这两个加密矩阵放在右上角和左下角,余下的两个角放a到z顺序的矩阵:
a b c d e E X A M P
f g h i j L B C D F
k l m n o G H I J K
p r s t u N O R S T
v w x y z U V W Y Z
K E Y WO a b c d e
R D A BC f g h i j
F G H I J k l m n o
L M N P S p r s t u
T U V X Z v w x y z
加密的步骤:
两个字母一组地分开讯息:(例如hello world变成he ll ow or ld)
找出第一个字母在左上角矩阵的位置
a b c d e E X A M P
f g h i j L B C D F
k l m n o G H I J K
p r s t u N O R S T
v w x y z U V W Y Z
K E Y W O a b c d e
R D A B C f g h i j
F G H I J k l m n o
L M N P S p r s t u
T U V X Z v w x y z
同样道理,找第二个字母在右下角矩阵的位置:
a b c d e E X A M P
f g h i j L B C D F
k l m n o G H I J K
p r s t u N O R S T
v w x y z U V W Y Z
K E Y W O a b c d e
R D A B C f g h i j
F G H I J k l m n o
L M N P S p r s t u
T U V X Z v w x y z
找右上角矩阵中,和第一个字母同行,第二个字母同列的字母:
a b c d e E X A M P
f g h i j L B C D F
k l m n o G H I J K
p r s t u NO R S T
v w x y z U V W Y Z
K E Y W O a b c d e
R D A B C f g h i j
F G H I J k l m n o
L M N P S p r s t u
T U V X Z v w x y z
找左下角矩阵中,和第一个字母同列,第二个字母同行的字母:
a b c d e E X A M P
f g h i j L B C D F
k l m n o G H I J K
p r s t u N O R S T
v w x y z U V W Y Z
K E Y W O a b c d e
R D A B C f g h i j
F G H I J k l m n o
L M N P S p r s t u
T U V X Z v w x y z
这两个字母就是加密过的讯息。
he lp me ob iw an ke no bi的加密结果:
FY GM KY HO BX MF KK KI MD
3、三分密码
首先随意制造一个3个3×3的Polybius方格替代密码,包括26个英文字母和一个符号。然后写出要加密的讯息的三维坐标。讯息和坐标四个一列排起,再顺序取横行的数字,三个一组分开,将这三个数字当成坐标,找出对应的字母,便得到密文。
(4)隔一位加密扩展阅读:
加密方法:
替换加密法:用一个字符替换另一个字符的加密方法。
换位加密法:重新排列明文中的字母位置的加密法。
回转轮加密法:一种多码加密法,它是用多个回转轮,每个回转轮实现单码加密。这些回转轮可以组合在一起,在每个字母加密后产生一种新的替换模式。
多码加密法:一种加密法,其替换形式是:可以用多个字母来替换明文中的一个字母。
夹带法:通过隐藏消息的存在来隐藏消息的方法。
Ⅳ 数字加密方法
数字加密方法:将该数每一位上的数字加9,然后除以10取余,做为该位上的新数字,最后将第1位和第3位上的数字互换,第2位和第4位上的数字互换,组成加密后的新数。
数据加密算法是一种对称加密算法,是使用最广泛的密钥系统,特别是在保护金融数据的安全中;密码算法是加密算法和解密算法的统称,它是密码体制的核心,密码算法可以看成一些交换的组合,当输入为明文时,经过这些变换,输出就为密文,此过程为加密算法。
数字加密标准(DES)
对每个64位的数据块采用56位密钥。加密的过程可以用若干种模式进行操作包括16次循环或操作。虽然它被认为是“强”加密,许多公司使用三个密钥,“三重数字加密标准(DES)”。这并不是说,DES加密信息不能被破解。早在1997年,另一个加密方法公钥加密算法(Rivest-Shamir-Adleman)的拥有人悬赏一万美元来破解数字加密标准信息。
Ⅵ C语言数字加密
/*
输入1个四位数,将其加密后输出。
方法是将该数每一位上的数字加9,然后除以10取余,做为该位上的新数字,最后将第1位和第3位上的数字互换,第2位和第4位上的数字互换,组成加密后的新数。
例:括号内是说明
输入
1257
输出
The encrypted number is 4621(每一位上的数字加9除以10取余后,得0146,交换后得到4601)
*/
#include <stdio.h>
int main( )
{
int number, digit1, digit2, digit3, digit4, newnum;
scanf("%d", &number);
digit1 = number/1000;
digit2 = (number - 1000 * digit1)/100;
digit3 = (number - 1000 * digit1 - 100 * digit2)/10;
digit4 = number - 1000 * digit1 - 100 * digit2 - 10 * digit3;
digit1 += 9;
digit1 %= 10;
digit2 += 9;
digit2 %= 10;
digit3 += 9;
digit3 %= 10;
digit4 += 9;
digit4 %= 10;
//第三位数是1的情况不做考虑
newnum = digit3 * 1000 + digit4 * 100 + digit1 * 10 +digit2;
printf("The encrypted number is %d\n", newnum);
return 0;
}