當前位置:首頁 » 編程語言 » c語言置換密碼

c語言置換密碼

發布時間: 2022-04-26 19:21:40

❶ 用c語言或者其他語言編寫替代密碼和置換密碼

給你,自己再稍微改造一下吧:
#include "stdio.h"
#include "conio.h"

main()
{
int k,i=0;
char a[100],b[100];
printf("qing shu ru ni de mi wen \n");
gets(a);
printf("qing shu ru mi shi \n");
scanf("%d",&k);
printf("\n");
do{
b[i]=(char)(a[i]+k);
if(b[i]>122){
b[i]=(char)(b[i]-26);
}
i++;
}while(a[i]!='\0');
puts(b);
getch();
}

❷ C語言設計一個用簡單的加密程序,即用字母替換的方式加密,程序運行中發現問題,求解釋。

原因就是char是1個位元組的,你不能超過127(hi,樓上的,不是128哦,是-128~127不要誤人子弟),你到後面的vwxyz已經溢出,所以是亂碼。
我的解決方法就很簡單,就是換成unsigned char 數組,這樣取值范圍增大到(0~255)就可以了,既簡單又不破壞原有的結構

還有
else if(str[i]<'a')
{
str[i]+=26;
}
這句話是廢話,可以刪掉

我修改過的版本
#include <stdio.h>
#include <string.h>
#include <ctype.h>

void EncodeString(unsigned char *str,int key)
{
int length,i;//length為傳入字元串長度,i用作循環計數器
length=strlen(str);
for(i=0;i<length;i++)//對字元串中的每個字元依次進行加密
{
if(isupper(str[i]))//對大寫字母加密
{
str[i]+=key%26;
if(str[i]>'Z')
{
str[i]-=26;
}

}
else if(islower(str[i]))//對小寫字母加密
{
str[i]+=key%26;
if(str[i]>'z')
{
str[i]-=26;
}

}

}
}

void main()
{
unsigned char arr[50],buffer;//arr[50]用來接收字元串信息,buffer用來接收緩沖區中的回車
int key;//key為加密秘鑰
printf("This program encodes messages using a cyclic cipher.\n");
printf("To stop, enter 0 as the key.\n");
while(1)//程序一直運行,直到輸入密鑰0為止
{
printf("Enter the key: ");
scanf("%d",&key);
scanf("%c",&buffer);
if(0==key)
{
break;//輸入密鑰為0,則退出程序
}
printf("Enter a message: ");
scanf("%s",arr);
scanf("%c",&buffer);
EncodeString(arr,key);
printf("Encoded message: %s\n",arr);
}
}

❸ C語言程序。急!

在單表置換密碼中,密鑰是由字母與空格組成的 如shana

在沒有密鑰作用前,置換表如下


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

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



在密鑰的作用下,置換表將發生變化,具體如下

將密鑰填入置換表,如果遇到重復的字元則忽略,接著按原表順序填充,忽略重復字元,如下表


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

S H A N B C D E F G I J K L M O P Q R T U V W X Y Z



首先將SHAN填入表中,因為A已經在前面出現,所以忽略,接著將除去S H A N四個字元的字母表按順序填充


C語言程序:

#include<stdio.h>
#include<string.h>
#include<malloc.h>

#defineMAX101 /*明文字元串的最大長度*/

char*encrypt(char*source,char*key);
intcontain(char*source,intn,charch);

voidmain()
{
char*source; /*明文*/
char*dest; /*密文*/
char*key; /*密鑰*/

source=(char*)malloc(sizeof(char)*MAX);
dest=(char*)malloc(sizeof(char)*MAX);
key=(char*)malloc(sizeof(char)*MAX);

printf("請輸入明文字元串:");
gets(source);
printf("請輸入密鑰:");
gets(key);

dest=encrypt(source,key);

printf("密文字元串:");
puts(dest);
}

/*加密明文(單表置換加密),返回密文*/
char*encrypt(char*source,char*key)
{
char*dest;
inti,j;
intlen1=strlen(source);
intlen2=strlen(key);
charch;

dest=(char*)malloc(sizeof(char)*MAX);
source=strupr(source);
key=strupr(key);

for(i=0;i<len1;i++)
{
dest[i]=NULL;
}
dest[i]='';

for(i=0,j=0;i<len1&&j<len2;)
{
while(j<len2&&contain(dest,i,key[j])==1)
{
j++;
continue;
}
if(j>=len2)
{
break;
}
dest[i++]=key[j++];
}

for(j=i;j<len1;j++)
{
ch='A'+(j-i+1);
while(contain(dest,j,ch)==1)
{
ch=(ch=='Z'?'A':ch+1);
}
dest[j]=ch;
}
dest[j]='';

returndest;
}

/*查找字元ch在字元串source的前n個字元中是否存在*/
intcontain(char*source,intn,charch)
{
inti;

for(i=0;i<n;i++)
{
if(source[i]==ch)
{
return1;
}
}

return0;
}


運行測試:

❹ c語言 替換 簡易密碼代換

#include <stdio.h>

void main()
{
int i=0, j=0;
char a[100] = {0};
scanf("%s",a);
while ('\0' != a[i])
{
a[i] += 4;
if (a[i] > 'z')
{
a[i] -= 26;
}
else if (a[i] > 'Z' && a[i] < 'e')
{
a[i] -= 26;
}
++i;
}
printf("%s",a);
}
驗證無問題

❺ ACM中的C語言題目:密碼替換

「這道題目。。。首先我看不懂他要我干什麼希望明白人給我講講。然後希望能給出程序甚至只是思路」
回答:他要你破譯密碼啊,這個是典型的移位加密
加密方法是:密文字母=(明文字母+密鑰)%26
當然,密文字母和明文字母都是數字表示的。
我們可以假設:a對應數字1,b對應數字2,依次類推
相應我們有解密方法:明文字母=(密文字母-密鑰)%26
這樣的話,根據題意只要我們需要嘗試每一個密鑰,才能破解密文
顯然密鑰只有0到25這26種可能。
根據題意,用蠻力法嘗試這26種可能,並且正確的密鑰會得到一句「the quick brown fox jumps over the lazy dog?」的明文。
所以思路可以是:
對密文嘗試用密鑰去破解,得到相應的明文,如果明文中有句子「the quick brown fox jumps over the lazy dog?」則相應的密鑰就是真實的密鑰,否則嘗試下一個密鑰。
「這個題目限定的內存只有1MB,時間1s,所以注意演算法的高效性,謝謝各位高手」
關於效率,你不需要擔心,題目的密鑰只要26種可能,用蠻力法破解也不用擔心超時的問題。

❻ C語言VC++6.0實現一個置換加密

這個應該滿足要求:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

FILE *fi,*fo;
char ps[20],txt1[1024],txt2[1024];
int plen,ps1[20];
int i,j,k;

void main(){
printf("password? ");
scanf("%s",ps);
plen=strlen(ps);
printf("PASSWORD is %s in length of %d, separated into:\n",ps,plen);
for(i=0;i<plen;i++){ps1[i]=ps[i]-48;printf("%3d",ps1[i]);}

fi=fopen("d:\\datin.txt","ra");
if(fi==NULL)exit(111);

fscanf(fi,"%s\n",txt1);
fclose(fi);

printf("\n\n---TEXT in file d:\\datin.txt before encoding : ---\n%s\n",txt1);

fo=fopen("d:\\datout.txt","wa");
if(fo==NULL)exit(222);

for(j=0;j<strlen(txt1);j++){
for(i=0;i<plen;i++)fprintf(fo,"%c",txt1[ps1[i]-1+j]);
j+=plen-1;
}
fclose(fo);

fi=fopen("d:\\datout.txt","ra");
fscanf(fi,"%s\n",txt2);
fclose(fi);

printf("\n---TEXT in file d:\\datout.txt after encoding : ---\n%s",txt2);

printf("\n");

}

// contents in datin.txt:
//

❼ 置換密碼用C語言怎麼編寫

不明白你的目的…替換密碼?哪裡的密碼?指跨進程保護進行內存讀寫嗎?

❽ C語言寫一個線路加密法或叫換位加密演算法

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<string.h>

constintMAXSIZE=100;

char*encrypt(char*essay){
inti,j,n,u,v,m,len=strlen(essay);
char*result;
m=n=(int)sqrt(len);
if(m*m<len)++n;
result=(char*)malloc(m*n*sizeof(char)+1);
for(i=0;i<m;++i){
for(j=0;j<n;++j){
u=n*i+j;
v=m*j+i;
if(u<len)result[v]=essay[u];
elseresult[v]='';
}
}
result[m*n]=0;
returnresult;
}

intmain(){
chars[MAXSIZE],*u;
printf("輸入明文: ");
fgets(s,MAXSIZE,stdin);
s[strlen(s)-1]=0;//去除尾部的
u=encrypt(s);
printf("密文是: %s ",u);
free(u);
return0;
}

❾ 求一個列換位加密的C語言演算法!!!謝謝各位大佬了!!

#include <stdio.h>#include <stdlib.h>#include <math.h>#include <string.h> const int MAXSIZE = 100; char *encrypt(char *essay) { int i,j,n,u,v,m,len = strlen(essay); char *result; m = n = (int)sqrt(len); if(m * m < len) ++n; result = (char *)malloc(m * n * sizeof(char) + 1); for(i = 0; i < m; ++i) { for(j = 0; j < n; ++j) { u = n * i + j; v = m * j + i; if(u < len) result[v] = essay[u]; else result[v] = ' '; } } result[m * n] = 0; return result;} int main() { char s[MAXSIZE],*u; printf("輸入明文:\n"); fgets(s,MAXSIZE,stdin); s[strlen(s) - 1] = 0; // 去除尾部的\n u = encrypt(s); printf("密文是:\n%s\n",u); free(u); return 0;}

❿ 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("\n");

return 0;
}
/*
ABCDEFGHIJKLMNOPQRSTUVWXYZ
*/

熱點內容
緩存視頻合並工具最新版 發布:2025-05-16 09:35:03 瀏覽:193
花雨庭伺服器ip地址和埠 發布:2025-05-16 09:34:58 瀏覽:239
同時修改多台伺服器管理地址工具 發布:2025-05-16 09:20:36 瀏覽:421
什麼配置就能玩地平線 發布:2025-05-16 09:13:46 瀏覽:82
python旋轉圖片 發布:2025-05-16 09:13:40 瀏覽:638
少女前線防檢測腳本 發布:2025-05-16 08:59:07 瀏覽:728
編譯器對系統的依賴 發布:2025-05-16 08:37:29 瀏覽:711
javamap數組 發布:2025-05-16 08:37:28 瀏覽:451
移動光貓如何自行修改密碼 發布:2025-05-16 08:20:15 瀏覽:125
作為基線存儲 發布:2025-05-16 08:15:22 瀏覽:859