前言:當(dāng)今社會(huì)是一個(gè)信息社會(huì),你的個(gè)人信息和聊天記錄極有可能被別有用心的人時(shí)時(shí)刻刻監(jiān)視著,那么你想不想實(shí)現(xiàn)專屬于兩個(gè)人或一個(gè)小圈子的人在社交軟件上的交流不被任何其他人讀懂呢?下面就給大家提供一個(gè)原理極其簡(jiǎn)單程序極其容易實(shí)現(xiàn)的C語(yǔ)言文字加密小程序的實(shí)現(xiàn)算法。
原理:ASCLL碼的加減乘除運(yùn)算。舉一個(gè)最簡(jiǎn)單的例子,從鍵盤(pán)輸入一行字符"",將所有字符的ASCLL碼加1后再打印出來(lái)就變成了"",將所有字符的ASCLL碼加2,則打印出來(lái)是"",試問(wèn)從打印出來(lái)的字符串的字里行間誰(shuí)還可以一眼就看出最初想要傳達(dá)的信息是""?同理,將加密文字所有字符的ASCLL碼減1再打印出來(lái)就可以實(shí)現(xiàn)對(duì)加密文字的翻譯,例如將""中每個(gè)字符的ASCLL碼都減1再打印出來(lái)就可以還原出""。
如果你足夠聰明,可以看出""是""中的所有字母在英文字母表里的順序后移一位形成的、""是""中的所有字母在英文字母表中的順序后移兩位形成的,那么請(qǐng)大家再來(lái)看一下漢字的情況。
我在鍵盤(pán)上錄入了"今天晚上我不回家吃飯了",將這串字符的ASCLL碼全部加1,打印出來(lái)是這樣的"掘晚晤市嫌臣假接湊負(fù)綠"。怎么樣,哈哈哈,是不是看完后丈二和尚摸不著頭腦?所以,用這種算法實(shí)現(xiàn)對(duì)漢字的加密和翻譯絕對(duì)隱蔽!漢字在計(jì)算機(jī)中的編碼比較復(fù)雜,一個(gè)漢字在 10系統(tǒng)下的編譯器里占2個(gè)字符的位置,我記得我有做過(guò)測(cè)試,在Cent OS Linux系統(tǒng)下占3個(gè)字符的位置。然而不管一個(gè)漢字占幾個(gè)字符的位置c語(yǔ)言實(shí)現(xiàn)文件加密,對(duì)每個(gè)字符的ASCLL碼做加減乘除的運(yùn)算和逆運(yùn)算就可以實(shí)現(xiàn)對(duì)文字的加密和翻譯。
下面向大家展示一下源代碼(加密算法為將所有字符的ASCLL碼加1,翻譯算法為將所有字符的ASCLL碼減1):
頭文件部分:
//Trans.h
#ifndef TRANS_H_INCLUDED
#define TRANS_H_INCLUDED
#include
#include
#include
void creat(char txt[])
{
for(int i=0;i
}
void trans(char txt[])
{
for(int i=0;i
主函數(shù)部分:
#include "Trans.h"
void main()
{
char txt[1024];
int choice;
printf("---------------歡迎使用譯碼機(jī)!---------------
");

printf("****************************************************
");
printf("生成加密文字請(qǐng)輸入1 翻譯加密文字泣請(qǐng)輸入2
");
printf("退出程序請(qǐng)輸入0
");
while(1)
{
printf("****************************************************
");
printf("請(qǐng)輸入您的選擇:");
scanf("%d",&choice);
fflush(stdin);
switch(choice)
{
case 1:
printf("請(qǐng)輸入文字:");
gets(txt);
creat(txt);
break;

case 2:
printf("請(qǐng)輸入加密文字:");
gets(txt);
trans(txt);
break;
case 0:
printf("退出成功!
");
exit(0);
default:
printf("您的輸入有誤,請(qǐng)重新輸入!
");
}
system("pause");
}
}
下面向大家展示一下加密與翻譯的效果:
思考與提高:僅僅將所有字符的ASCLL碼加1就實(shí)現(xiàn)對(duì)文字信息的加密了,會(huì)不會(huì)很容易被破譯呢?請(qǐng)恕博主我不是密碼學(xué)專家,這一點(diǎn)我無(wú)法回答,但是直觀感覺(jué)這樣加密確實(shí)有點(diǎn)簡(jiǎn)單。那么我們就可以對(duì)字符進(jìn)行多種更為復(fù)雜的處理,比如給所有字符加上一個(gè)正負(fù)變換的數(shù)列、給所有字符加上斐波那契數(shù)列等。總之,直觀感覺(jué)就是越復(fù)雜越不容易被破譯。
下面向大家展示一下給所有字符加上一個(gè)正負(fù)變換的數(shù)列的加密算法的源代碼:
頭文件部分:
//Trans.h
#ifndef TRANS_H_INCLUDED
#define TRANS_H_INCLUDED
#include
#include
#include
void creat(char txt[])
{
int f=1;
for(int i=0;i
{
int f=-1;
for(int i=0;i
主函數(shù)部分主要是用來(lái)調(diào)試的c語(yǔ)言實(shí)現(xiàn)文件加密,與上面那個(gè)簡(jiǎn)單加密算法的主函數(shù)部分相同。
下面向大家展示一下使用這種復(fù)雜加密算法加密與翻譯的效果:
用了加密程序后,畫(huà)風(fēng)是這樣的:
學(xué)習(xí)從來(lái)不是一個(gè)人的事情,要有個(gè)相互監(jiān)督的伙伴,工作需要學(xué)習(xí)C/C++或者為了入行、轉(zhuǎn)行學(xué)習(xí)C/C++的伙伴可以私信回復(fù)小編“學(xué)習(xí)”領(lǐng)取全套免費(fèi)C/C++學(xué)習(xí)資料、視頻
你想成為一個(gè)什么樣的程序員?