A. c语言写程序:输入一个正整数n(n<7),输出n行由大写字母A开始构成的三角形字符阵列图,输出示例
#include<stdio.h>
intmain()
{
charc='A';
intn;
scanf("%d",&n);
while(n)
{
inti;
for(i=0;i<n;i++)
putchar(c++);
n--;
printf(" ");
}
return0;
}
B. 换位密码的举例
举例:周期为e的换位将明文字母划分。
换位密码就是一种早期的加密方法,与明文的字母保持相同,区别是顺序被打乱了。
古典密码:
从远古到1949年香农发表《保密系统的通信理论》,这期间人类所使用的密码均称为古典密码,本文主要介绍三种古典密码,分别为置换密码,代换密码和轮换密码。
置换密码(又称为换位密码):
是指明文中各字符的位置次序重新排列得到密文的一种密码体制。
特点:保持明=文中所有的字符不变,只是利用置换打乱明文字符的位置和次序。
置换定义:有限集X上的运算σ:X→X,σ是一个双射函数,那么称σ为一个置换。
即任意x∈X,存在唯一的x’∈X,使得σ(x)=x’。
解密的时候会用到逆置换σ’,即任意x’∈X,存在唯一的x∈X,使得σ’(x’)=x且满足σσ’=I。
对置换有了一个基本的认识之后我们来谈一下置换密码,置换密码有两种,一种为列置换密码,一种为周期置换密码。
列置换密码:
列置换密码,顾名思义,按列换位并且按列读出明文序列得到密文,具体加密步骤如下:
将明文p以固定分组长度m按行写出nxm阶矩阵(若不m倍数,空余部分空格补充)。
按(1,2,3…m)的置换σ交换列的位置,σ为密钥。
把新得到的矩阵按列的顺序依次读出得到密文c。
解密过程如下:
将密文c以固定的长度n按列写成nxm阶矩阵。
按逆矩阵σ’交换列的位置。
把矩阵按着行依次读出为明文。
周期置换:
周期变换密码是将明文P按固定长度m分组,然后对每组的字符串按置换σ重新排列位置从而得到密文。
周期排列与列排列思想是一致的,只不过列排列是以矩阵的形式整列换位置,而周期是在分组以后对每组分别变换。懂得列排列就可以很容易地理解周期排列。
代换密码(又称为替代密码):
就是讲明文中的每个字符替代成密文中的另一个字符,替代后的各个字母保持原来的位置,在对密文进行逆替换就可以恢复出明文。
代换密码有分为单表代换密码和多表代换密码。
单表代换密码我们分别介绍凯撒密码和仿射密码。
凯撒密码:
凯撒密码依据凯撒密码代换表对26个英文字母进行替换。
C. C语言简单密码破解(密文转明文)
调了半天,楼主真是太粗心了!middle1[]应该这样声明:
char
middle1[]={'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};
最后输出start的时候要注意控制长度,改个for循环就好了!
#include<stdio.h>
#include<string.h>
int
main(void)
{
int
i,j,length,n;
char
temp;
char
middle2[27];
char
start[201],finish[201];
char
middle1[]={'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};
gets(middle2);
gets(finish);
scanf("%d",&n);
length=strlen(finish);
for(i=0;i<25;i++)
{
for(j=i+1;j<26;j++)
{
if(middle2[i]>middle2[j])
{
temp=middle2[i];
middle2[i]=middle2[j];
middle2[j]=temp;
temp=middle1[i];
middle1[i]=middle1[j];
middle1[j]=temp;
}
}
}
for(i=1;i<=n;i++)
{
for(j=0;j<length;j++)
{
if(finish[j]=='
')
{
start[j]='
';
}
else
{
start[j]=middle1[finish[j]-'A'];
}
}
}
for(
i
=
0;i
<
length;++i)
printf("%c",start[i]);
printf("\
");
return
0;
}
/*
ABCDEFGHIJKLMNOPQRSTUVWXYZ
*/
D. c语言 修改密码初始密码为123456,密码包含数字和字母,数字必须大于2位
#include<stdio.h>
#include<string.h>
#include<ctype.h>
intmain()
{charpsw[21]="123456",t1[21],t2[21];
inti,n=0;
printf("请输入初始密码: ");
do
{gets(t1);
n++;
err=strcmp(t1,psw);
if(err)printf("初始密码错误!请重新输入! ");
}
while(err&&n<3);
if(strcmp(t1,psw))
{printf("密码错误,不能登录! ");
return0;
}
while(n<3)
{while(n<3)
{printf("请输入新密码: ");
gets(t1);
for(i=0;t1[i];i++)
if(isdigit(t1[i]))n++;
if(n<3)
{n=0;
printf("数字必须大于2位! ");
}
}
printf("请再次输入新密码: ");
gets(t2);
if(strcmp(t1,t2)==0)
printf("密码修改成功! ");
else
{printf("二次密码不一致! ");
n=0;
}
}
return0;
}
E. 文本串加密和解密程序
加密解密函数及用法示例http://hi..com/ypxmaomao/blog/item/6361f5d6fb1e8e2606088b32.html
F. 哪位高人能帮忙用C语言设计一个周期为3的多表代替密码...跪求~
#include<stdio.h>
main()
{
char c1,c2,c3,c4,c5;
printf("请输入需要译的密码:");
scanf("%c%c%c%c%c",&c1,&c2,&c3,&c4,&c5);
c1=c1+4;
c2=c2+4;
c3=c3+4;
c4=c4+4;
c5=c5+4;
printf("密码为:%c%c%c%c%c\n",c1,c2,c3,c4,c5);
return 0;
}
你可以参考我做过的一个简单的字母后推4的,你说的那个只要改变密码的输出方式就OK乐
G. c语言把n(n=7)个数前m个和后n-m个互换位置
有两种修改方法(都是修改中间的一个循环):
方法1)
for(i=0;i<n;i++)
{if(i<n-m)
b[i]=a[i+m];
else b[i]=a[i+m-n];
}
方法2)
for(i=0;i<n;i++)
{b[i]=a[i<n-m?i+m:i+m-n];
}
方法3)
for(i=0;i<n;i++)
{b[i]=a[(i+m)%n];
}
H. 如何用C语言编写密码程序
1、用一个字符数组来存密码
再用一个字符数组接收你的输入,然后用strcmp
来比较,如果返回0则密码是正确的
2、例程:
#include"stdio.h"
#include"string.h"
intmain()
{
charmima[100]="YuanShi888";
charinput[100]={0};
printf("请输入密码:");
gets(input);
if(strcmp(mima,input)==0)
printf("恭喜你,密码正确! ");
else
printf("对不起,密码输入错误! ");
}
I. 古典密码的置换密码
①加法密码
A和B是有 n个字母的字母表。
定义一个由A到B的映射:f:A→B
f(ai )= bi=aj
j=i+k mod n
加法密码是用明文字母在字母表中后面第 k个字母来代替。
K=3 时是着名的凯撒密码。
恺撒密码——历史上第一个密码技术
“恺撒密码”是古罗马恺撒大帝在营救西塞罗战役时用来保护重要军情的加密系统(《高卢战记》)。
②乘法密码
A和B是有n个字母的字母表。?定义一个由A到B的映射:f:A→B f(ai )= bi= aj j=ik mod n 其中,(n,k)=1。注意:只有(n,k)=1,才能正确解密。
③密钥词组代替密码
随机选一个词语,去掉其中的重复字母,写到矩阵的第一行,从明文字母表中去掉这第一行的字母,其余字母顺序写入矩阵。然后按列取出字母构成密文字母表 单表代替密码的安全性不高,一个原因是一个明文字母只由一个密文字母代替。可以利用频率分析来破译。故产生了更为安全的多表代换密码,即构造多个密文字母表,在密钥的控制下用以一系列代换表依次对明文消息的字母序列进行代换。着名的多表代替密码有Vigenere密码等。
① Vernam密码
明文、密文、密钥都表示为二进制位:
M=m1,m2,… ,mn K =k1,k2,… ,kn C =c1,c2,… ,cn
②Playfair密码
用密钥控制生成矩阵,然后每两个字母为单位进行代换。
③Hill密码(乘积密码)
建立在矩阵相乘的基础上,但不能抵抗已知明文攻击。
J. c语言编程 为了使电文保密,往往按一定规律将其转换成密码,收报人再按约定的规律将其译回原文。
#include <stdio.h>
void main()
{
char context[256];
int i=0;//context数组的下标
printf("Type the original text:\n");
gets(context);
while(context[i]!='!'&&context[i]!=0)//如果原字符串忘加“!”也应能正常结束
{
if ((context[i]>='A'&&context[i]<='V')||(context[i]>='a'&&context[i]<='v'))
context[i]=context[i]+4;
else if ((context[i]>='W'&&context[i]<='Z')||(context[i]>='w'&&context[i]<='z'))
context[i]=context[i]-22;
i++;
}
puts(context);
getchar();
}