異或運算有一個特性
成都創新互聯公司專注于花山企業網站建設,響應式網站開發,商城網站制作。花山網站建設公司,為花山等地區提供建站服務。全流程按需求定制開發,專業設計,全程項目跟蹤,成都創新互聯公司專業和態度為您提供的服務
若
c = a xor b
那么
a = c xor b
根據這樣的特性,你有一個信息a,然后你產生一個密碼b,把它和a異或運算之后就變成了c。這就是一種加密,解密的時候,把c重新和b異或運算,就變回了a。
順帶說一下,異或是很弱的加密方法,很容易被破解的。
太麻煩了,建議您可以下載文件夾加密超級大師試試。
文件夾加密超級大師支持所有windows系統,可以加密文件夾,加密文件,保護磁盤和數據粉碎,使用起來非常方便。
異或加密是所有加密中最容易實施且代碼量相對精簡的一種加密方式,其原理為任意數據被同一個值(key)兩次異或后,值不變。
這種特性,使得異或加密算法的加解密流程是完全相同的,也就是說加解密可以用同一個函數實現。
一、算法思路。
依次讀入文件字符,并用key值對其異或,結果輸入到目標文件中。
二、算法描述。
1 打開源文件及目標文件。
2 獲取密鑰值(key)。
3 讀入一個字符。
4 對其進行異或計算。
5 結果寫入目標文件。
6 重復3-5直到文件結尾。
7 關閉文件。
三、代碼實現。
為使代碼簡潔易懂,輸入文件設定為in.txt, 輸出文件設定為out.txt, key值設定為0x5C。
假定所有文件及目錄可讀寫。
#include?stdio.h
#define?IN?"in.txt"
#define?OUT?"out.txt"
#define?KEY?0x5C
void?scrambler(const?char?*in,?const?char?*out,?unsigned?char?key)
{
FILE?*i,?*o;
int?c;
i?=?fopen(in,?"rb");
o?=?fopen(out,?"wb");//打開文件,因為假定可讀寫,所以對是否成功不做判斷
while((c?=?fgetc(i))!=EOF)//讀入字符直到文件結尾
{
c^=key;//執行異或加密或解密
fputc(c,o);//寫入文件
}
fclose(i);
fclose(o);
}
int?main()
{
scrambler(IN,OUT,KEY);
return?0;
}
但是異或加密也是有缺陷的。最大的缺陷是加密操作是二進制層面的,獲取到的加密文件大部分將是不可讀的亂碼。這也是為什么在打開文件的時候要以二進制方式的原因。
鑒于此,在此不便給出測試樣例及輸入輸出,可自行調試。
首先,我們看一下異或的原理:
a = 3 ^ 5;
3的二進制是0011,5的二進制是0101。異或發現兩者的不同之處,所以a最終為0110b(4)。
了解了異或的基本原理后,接下來看上述的代碼。
a^=b;
這一句使得a被賦值為“數值a”與“數值b”的“差異值”。
然后:b^=a;
這一句用異或利用“差異值”來還原a的數值,并賦值給b。此時b等于a先前的數值。
最后一句:a^=b;
因為a仍然保存著“差異值”,這一句通過異或使得b的初始值被還原,并賦值給a。
。。。。。
這樣,異或就將a與b的數值“巧妙”地交換了……
我也是百度的,和樓主一起學習…………
這個要看您的軟件的加密強度了。
文件加密軟件,我使用的是超級加密3000.
超級加密3000采用國際上成熟的加密算法和安全快速的加密方法,可以有效保障數據安全!
char str[100] = "123";
//加密
for (int i = 0; str[i] != '\0'; i++)
str[i] ^= 0;
//解密 原理是一個A異或B異或C=A
for (int i = 0; str[i] != '\0'; i++)
str[i] ^= 0;