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();
}