1. 程式人生 > >C語言文字加密程式的實現

C語言文字加密程式的實現

前言:當今社會是一個資訊社會,你的個人資訊和聊天記錄極有可能被別有用心的人時時刻刻監視著,那麼你想不想實現專屬於兩個人或一個小圈子的人在社交軟體上的交流不被任何其他人讀懂呢?下面就給大家提供一個原理極其簡單程式極其容易實現的C語言文字加密小程式的實現演算法。

原理:ASCLL碼的加減乘除運算。舉一個最簡單的例子,從鍵盤輸入一行字元"LANGUAGE",將所有字元的ASCLL碼加1後再打印出來就變成了"MBOHVBHF",將所有字元的ASCLL碼加2,則打印出來是"NCPIWCIG",試問從打印出來的字串的字裡行間誰還可以一眼就看出最初想要傳達的資訊是"LANGUAGE"?同理,將加密文字所有字元的ASCLL碼減1

再打印出來就可以實現對加密文字的翻譯,例如將"MBOHVBHF"中每個字元的ASCLL碼都減1再打印出來就可以還原出"LANGUAGE"。

如果你足夠聰明,可以看出"MBOHVBHF"是"LANGUAGE"中的所有字母在英文字母表裡的順序後移一位形成的、"NCPIWCIG"是"LANGUAGE"中的所有字母在英文字母表中的順序後移兩位形成的,那麼請大家再來看一下漢字的情況。

我在鍵盤上錄入了"今天晚上我不回家吃飯了",將這串字元的ASCLL碼全部加1,打印出來是這樣的"掘晚晤市嫌臣假接湊負綠"。怎麼樣,哈哈哈,是不是看完後丈二和尚摸不著頭腦?所以,用這種演算法實現對漢字的加密和翻譯絕對隱蔽!

漢字在計算機中的編碼比較複雜,一個漢字在Windows 10系統下的CodeBlocks編譯器裡佔2個字元的位置,我記得我有做過測試,在Cent OS Linux系統下佔3個字元的位置。然而不管一個漢字佔幾個字元的位置,對每個字元的ASCLL碼做加減乘除的運算和逆運算就可以實現對文字的加密和翻譯。

下面向大家展示一下原始碼(加密演算法為將所有字元的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

主函式部分:

#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就實現對文字資訊的加密了,會不會很容易被破譯呢?請恕博主我不是密碼學專家,這一點我無法回答,但是直觀感覺這樣加密確實有點簡單。那麼我們就可以對字元進行多種更為複雜的處理,比如給所有字元加上一個正負變換的數列、給所有字元加上斐波那契數列等。總之,直觀感覺就是越複雜越不容易被破譯。

下面向大家展示一下給所有字元加上一個正負變換的數列的加密演算法的原始碼:

標頭檔案部分:

//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

主函式部分主要是用來除錯的,與上面那個簡單加密演算法的主函式部分相同。

大家如果有什麼疑問歡迎email我,想要我做的這個譯碼機成品的可以在email裡回覆“我要成品”。

email:[email protected]