給電文加密
A. 二戰時如何加密電文
一般來說都是把消息的詞語替換成預先設定的暗語,解讀時只要對照密碼本即可破譯,美國電影《風語者》一片中美國人就是訓練了一些會說印第安土著語的印第安人來傳遞密碼,日本人盡管截獲了電文,但是無從下手。有時發報之前還會在電文內添加一些無意義的詞句來增加敵方的破譯難度(這里不得不說一件這個操作引發的趣事-----在二戰的最後一次海上大戰聖克魯斯海戰時,當時的美軍海軍司令尼米茲給艦隊指揮官哈爾西發報詢問他的位置時,就加了一句會引發歧義的話----「全世界都想知道」,弄的哈爾西火冒三丈,以為尼米茲在嘲笑他,因此不顧一切的去追殺日本艦隊,險些把日軍全殲)
實際操作時為了節省時間,報務員會使用密碼機,他只要正常輸入電文,密碼機就會自動輸出加密好的電文,然後再拿去發
B. C語言的程序設計 電文加密,每個字母轉換為字母表中循環右移的第三個字母。
//對一行電文進行加密,每個字母轉換為字母表中循環右移的第三個字母
//大寫字母C加密後的ASCII碼值為(c-62)%26+65
//小寫字母C加密後的ASCII碼值為(c-94)%26+97
#include<stdio.h>
void main()
{
//定義數組a和b,以及控制變數i
char a[3];
char b[3];
int i;
//提示輸入三個字母
printf("請輸入三個字母不要用空格隔開\n");
//用for循環控制接受字母
for(i=0;i<3;i++)
scanf("%c",&a[i]);
//在下一循環前加入該句
printf("經加密後為:");
//用for循環計算加密後的字母的ASCII值
for(i=0;i<=2;i++)
{
if(a[i]>=97)
b[i]=(a[i]-94)%26+97;
if(a[i]>=65&&a[i]<97)
b[i]=(a[i]-62)%26+65;
//輸出結果
printf("%c",b[i]);
}
printf("\n");
}
C. python電文加密
##注意:最左邊每個=表示一個空格
def encrypt(t):
====s=""
====for e in t:
========if e.islower():
============s+=chr(97+(ord(e)-97+7)%26)
========elif e.isupper():
============s+=chr(65+(ord(e)-65+7)%26)
========else:
============s+=e
====return s
t=input()
print(t,encrypt(t))
D. 用C語言編程:對一行電文進行加密,每個字元轉換為字母表中循環右移的第三的字母,如:a-b,b-e.....大寫字
#include<stdio.h>
voidchange(chars[]){
inti;
for(i=0;s[i];++i){
if(s[i]>='a'&&s[i]<='z')
s[i]=(s[i]+2-'a')%26+'a';
elseif(s[i]>='A'&&s[i]<='Z')
s[i]=(s[i]+2-'A')%26+'A';
}
}
intmain(){
chars[256];
printf("輸入一個字元串:");
scanf("%s",s);
change(s);
printf("轉換後為:%s
",s);
return0;
}
E. 電文加密
#include<iostream>
#include<cstring>
#include<cstdlib>
using namespace std;
char s1[1100], s2[1100];
int s[1100];
int key, len, i, j;
void cpy()
{
int k = 0;
while (k != key)
{
if (!s[++j] && j < len)
k++;
if (j >= len)
j = j - len - 1;
}
s2[j] = s1[i];
s[j] = 1;
}
void cpy2()
{
int k = 0;
while (k != -key)
{
if (!s[++j] && j < len)
k++;
if (j >= len)
j = j - len - 1;
}
s2[i] = s1[j];
s[j] = 1;
}
int main()
{
#ifdef LOCAL
freopen("judge for e\\test\\1.in", "r", stdin);
freopen("judge for e\\test\\1.out", "w", stdout);
#endif
int c = 0;
while (cin >> key)
{
cout << "Case " << ++c << ":" << endl;
cin.getline(s1, 1);
cin.getline(s1, 1000);
len = strlen(s1);
memset(s, 0, sizeof(s));
if (key > 1)
for (i = 0, j = -1; i < len; i++)
cpy();
if (key < -1)
for (i = 0, j = -1; i < len; i++)
cpy2();
s2[len] = *\0*;
cout << s2 << endl;
cout << endl;
}
return 0;
}
F. 電文(字元串)加密,形成密碼文(字元串)的問題
以前做過完全一樣的啊,給,已經編譯運行確認:
#include <stdio.h>
#include <string.h>
#include <malloc.h>
typedef struct node
{
char ch;
struct node *forward; /*鏈接下一節點*/
struct node *backward; /*鏈接前一節點*/
} CODE;
char *decode(char *ocode, int key)
{
char *ncode;
int length, count,i;
CODE *loop , *p;
length = strlen(ocode);
loop= (CODE*)malloc(length*sizeof(CODE)); /*動態分配密文環*/
for(i=0;i<length-1;i++)
{
loop[i].forward = &loop[i+1];
loop[i].backward =&loop[i-1];
}
loop[0].backward =&loop[length-1];
loop[0].forward = &loop[1];
loop[length-1].forward = loop;
loop[length-1].backward = &loop[length-2];
for(p=loop, i=0; i<length;i++)
{
/*產生密文鏈表*/
for(count=1;count<key; count++)
p= p->forward;
p->ch =*ocode++;
p->backward->forward =p->forward;
p->forward->backward = p->backward;
p = p->forward;
}
ncode = (char*)malloc((length+1)*sizeof(char));
for(i=0;i<length;i++)
ncode[i] =loop[i].ch;
ncode[length] = '\0';
return ncode;
}
void main()
{
char ocode[256];
int key, num=0;
printf("輸入原文字元串: ");
while(num<255&&(ocode[num++]=getchar())!='\n');
ocode[(num==255)?num:num-1] ='\0';
do
{
printf("輸入加密密鑰:");
scanf("%d",&key);
} while(key<=1);
printf("電文的密碼是: %s\n",decode(ocode,key));
}