前言:當今社會是一個信息社會戳粒,你的個人信息和聊天記錄極有可能被別有用心的人時時刻刻監(jiān)視著,那么你想不想實現(xiàn)專屬于兩個人或一個小圈子的人在社交軟件上的交流不被任何其他人讀懂呢虫啥?下面就給大家提供一個原理極其簡單程序極其容易實現(xiàn)的C語言文字加密小程序的實現(xiàn)算法蔚约。
PS:文章末尾有驚喜哦!
原理:ASCLL碼的加減乘除運算涂籽。舉一個最簡單的例子苹祟,從鍵盤輸入一行字符"LANGUAGE",將所有字符的ASCLL碼加1后再打印出來就變成了"MBOHVBHF",將所有字符的ASCLL碼加2评雌,則打印出來是"NCPIWCIG"树枫,試問從打印出來的字符串的字里行間誰還可以一眼就看出最初想要傳達的信息是"LANGUAGE"?
同理景东,將加密文字所有字符的ASCLL碼減1再打印出來就可以實現(xiàn)對加密文字的翻譯砂轻,例如將"MBOHVBHF"中每個字符的ASCLL碼都減1再打印出來就可以還原出"LANGUAGE"。
如果你足夠聰明斤吐,可以看出"MBOHVBHF"是"LANGUAGE"中的所有字母在英文字母表里的順序后移一位形成的搔涝、"NCPIWCIG"是"LANGUAGE"中的所有字母在英文字母表中的順序后移兩位形成的,那么請大家再來看一下漢字的情況和措。
我在鍵盤上錄入了"今天晚上我不回家吃飯了"庄呈,將這串字符的ASCLL碼全部加1,打印出來是這樣的"掘晚晤市嫌臣假接湊負綠"派阱。
怎么樣诬留,哈哈哈,是不是看完后丈二和尚摸不著頭腦贫母?所以文兑,用這種算法實現(xiàn)對漢字的加密和翻譯絕對隱蔽!
漢字在計算機中的編碼比較復雜腺劣,一個漢字在Windows 10系統(tǒng)下的CodeBlocks編譯器里占2個字符的位置绿贞,我記得我有做過測試,在Cent OS Linux系統(tǒng)下占3個字符的位置誓酒。
然而不管一個漢字占幾個字符的位置樟蠕,對每個字符的ASCLL碼做加減乘除的運算和逆運算就可以實現(xiàn)對文字的加密和翻譯。
下面向大家展示一下源代碼(加密算法為將所有字符的ASCLL碼加1靠柑,翻譯算法為將所有字符的ASCLL碼減1):
頭文件部分:
//Trans.h
#ifndef TRANS_H_INCLUDED
#define TRANS_H_INCLUDED
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void creat(char txt[])
{
? for(int i=0;i<strlen(txt);i++)
? {
? txt[i]+=1;
? }
? printf("生成的加密文字為:%s\n",txt);
}
void trans(char txt[])
{
? for(int i=0;i<strlen(txt);i++)
? {
? ? ? txt[i]-=1;
? }
? printf("解密后文字為:%s\n",txt);
}
#endif // TRANS_H_INCLUDED
主函數(shù)部分:
#include "Trans.h"
void main()
{
? char txt[1024];
? int choice;
? printf("---------------歡迎使用譯碼機!---------------\n");
? printf("****************************************************\n");
? printf("生成加密文字請輸入1? ? ? 翻譯加密文字泣請輸入2\n");
? printf("退出程序請輸入0\n");
? while(1)
? {
? ? ? printf("****************************************************\n");
? ? ? printf("請輸入您的選擇:");
? ? ? scanf("%d",&choice);
? ? ? fflush(stdin);
? ? ? switch(choice)
? ? ? {
? ? ? case 1:
? ? ? ? ? printf("請輸入文字:");
? ? ? ? ? gets(txt);
? ? ? ? ? creat(txt);
? ? ? ? ? break;
? ? ? case 2:
? ? ? ? ? printf("請輸入加密文字:");
? ? ? ? ? gets(txt);
? ? ? ? ? trans(txt);
? ? ? ? ? break;
? ? ? case 0:
? ? ? ? ? printf("退出成功!\n");
? ? ? ? ? exit(0);
? ? ? default:
? ? ? ? ? printf("您的輸入有誤,請重新輸入!\n");
? ? ? }
? ? ? system("pause");
? }
}
下面向大家展示一下加密與翻譯的效果:
思考與提高:僅僅將所有字符的ASCLL碼加1就實現(xiàn)對文字信息的加密了寨辩,會不會很容易被破譯呢?請恕博主我不是密碼學專家歼冰,這一點我無法回答靡狞,但是直觀感覺這樣加密確實有點簡單。
那么我們就可以對字符進行多種更為復雜的處理隔嫡,比如給所有字符加上一個正負變換的數(shù)列甸怕、給所有字符加上斐波那契數(shù)列等∪鳎總之梢杭,直觀感覺就是越復雜越不容易被破譯。
下面向大家展示一下給所有字符加上一個正負變換的數(shù)列的加密算法的源代碼:
頭文件部分:
//Trans.h
#ifndef TRANS_H_INCLUDED
#define TRANS_H_INCLUDED
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void creat(char txt[])
{
? int f=1;
? for(int i=0;i<strlen(txt);i++)
? {
? txt[i]+=f;
? f=-f;
? }
? printf("生成的加密文字為:%s\n",txt);
}
void trans(char txt[])
{
? int f=-1;
? for(int i=0;i<strlen(txt);i++)
? {
? ? ? txt[i]+=f;
? ? ? f=-f;
? }
? printf("解密后文字為:%s\n",txt);
}
#endif // TRANS_H_INCLUDED
主函數(shù)部分主要是用來調試的秸滴,與上面那個簡單加密算法的主函數(shù)部分相同武契。
————————
看到這里你是不是對“Linux”又有了一點新的認知呢~
如果你喜歡這篇文章的話,動動小指荡含,點個贊再走~
如果你想學編程咒唆,小編推薦一個編程學習俱樂部【下圖進入】!
一個活躍释液、高逼格全释、高層次的編程學習殿堂;編程入門只是順帶误债,思維的提高才有價值浸船!
涉及:編程入門、游戲編程寝蹈、網(wǎng)絡編程糟袁、Windows編程、Linux編程躺盛、Qt界面開發(fā)项戴、黑客等等....
下面向大家展示一下使用這種復雜加密算法加密與翻譯的效果:
用了加密程序后,畫風是這樣的: