⑴ 怎麼樣把一個文本文件加密成二進制文件
讀取文本文件內容存入2進制數組,對數組進行加密換算,然後再保存數組數據!
⑵ 如何用C語言對文件進行加密和解密急求......................
文件分為文本文件和二進制文件。加密方法也略有不同。
1、文本文件
加密的主要是文本的內容,最簡單的方法就是修改文檔的內容,比如1.txt中的文件內容:
abcd
只要給每一個字元+1,就可以實現加密。文件內容即會變為
bcde
2、二進制文件加密
二進制文件加密也就是對應用程序加密,需要理解可執行文件格式,比如Windows平台的Exe文件它是PE結構,Linux上的可執行文件是ELF結構,要對這樣的程序進行加密,實際上是開發一種叫做「殼」的程序,這種程序的開發,需要將扎實的底層基礎,同時也需要對軟體加密解密有細致的理解,比如流行的vmprotect、z殼以及早些年的upx殼、aspack等等。
3、無論哪種加密都牽涉到文件操作的問題,使用C語言進行文件操作時,極少使用C標准庫中的I/O函數,大多數使用操作系統提供的內存文件映射相關的API函數,有興趣,可以搜索相關的資料。
⑶ 二進制加密
一個簡單而專業的辦法是,你用DES加密,加密後,這句話就成了密文。
還有一個辦法,你自己隨便編一個128的亂序ASCII字元對應表,其實就是在程序中加個128位元組的常量數組,然後將你的那句話逐位元組的查表替換就可以生成密文了。
⑷ 12:字元串加密、解密
編碼: 將計算機中的字元串按照一定的順序表示成二進制數據的過程
各國字元編碼都不一樣:
1、計算機-> 表示[英文字母、數字、部分特殊符號]-> ascii編碼 [0~256]
2、萬國碼,統一字元編碼[號稱可以統一全球范圍內任何語言的表示方式]
任何語言中的任何數據,都可以使用一個字元來表示 unicode編碼
3、中國有GB2312-> GBK -> GB18030
4、數據傳輸編碼:unicode transfer format 8 bit [UTF-8]
python中的編碼解碼:
要命的規則:字元串的編碼解碼,一直都是任何語言中一個難點和重點
任何字元串->都是由位元組組成的!
python3中:字元:(str);位元組(bytes)
字元->位元組:encode 編碼:將一個字元串編碼成計算機可以操作的二進制數據
位元組->字元:decode 解碼:將一個二進制數據按照指定的編碼~解碼成自然數據
什麼是加密: 將一個明文數據,按照指定的演算法,運算得到一個其他的可以隱藏真實信息的密文數據,這個過程稱為加密;處理的演算法稱為加密演算法;用到的關鍵數據稱為密鑰
什麼是解密: 按照指定的演算法和關鍵數據,將一個密文數據進行逆向運算得到正確的明文數據的過程成為解密操作
(1)、單向加密演算法:只能加密,不能解密的演算法
如:用戶賬號密碼(單向加密)存儲,此時任何人都不能查看該用戶的明文密碼
流程->用戶輸入明文密碼->加密->和存儲的密文密碼進行比較->相等-成功
單向散列加密演算法-> MD5加密
單項哈希加密演算法-> SHAX加密
(2)、雙向加密演算法:可以加密,加密的數據可以解密得到明文數據
使用在更多的場景;數據進行加密傳輸->目標地址->解密得到明文數據進行處理
對稱加密:加密和解密使用相同的秘鑰;
非對稱加密:加密和解密使用不同的秘鑰;如HTTPS傳輸數據
hashlib主要提供字元加密功能,將md5和sha模塊整合到了一起,支持md5,sha1, sha224, sha256, sha384, sha512等演算法
注意: hashlib 加密啊的字元串類型為二進制編碼,直接加密字元串會報如下錯誤:
有兩種方式可以將字元串轉化為二進制數據
⑸ 加密技術
對稱加密就是指,加密和解密使用同一個密鑰的加密方式。需要用到的有加密演算法和加密秘鑰。例如加密演算法可以類似這樣的加密規則(a ->b,b->w,c->a)
發送方使用密鑰將明文數據加密成密文,然後發送出去,接收方收到密文後,使用同一個密鑰將密文解密成明文讀取。
優點:加密計算量小、速度快,效率高,適合對大量數據進行加密的場景。
缺點:(1)密鑰不適合在網上傳輸(容易被截取),(2)密鑰維護麻煩
DES 、3DES、Blowfish、IDEA、RC4、RC5、RC6和AES。
數據加密標准DES屬於常規密鑰密碼體制,是一種分組密碼。加密前,先對整個明文進行分組,每一組長為64位,然後對每一個64位二進制數據進行加密處理,產生一組64位密文數據。最後將各組密文串接起來,即得出整個的密文。使用的密鑰為64位(實際密鑰長度為56位,有8位用於奇偶檢驗)
DES的保密性取決於密鑰的保密,而演算法是公開的。盡管人們在破譯DES方面取得了許多進展,但至今仍未能找到比窮舉搜索密鑰更有效的方法。DES是世界上第一個公認的實用密碼演算法標准,它曾對密碼學的發展做出了重大貢獻。目前較為嚴重的問題是DES的密鑰長度,現在已經設計出搜索DES密鑰的專用晶元。
DES演算法安全性取決於密鑰長度,56位密鑰破解需要3.5到21分鍾,128位密鑰破解需要5.4 * 10^18次方年
注意的是:這里是沒有密鑰的情況下,直接窮舉密鑰嘗試破解。如果密鑰在傳送過程中被人截取了,就相當於直接知道加密規則了,根本不需要破解,因此密鑰在網路中傳送還是不安全。
與對稱加密演算法不同,非對稱加密演算法需要密鑰對,即兩個密鑰:公開密鑰(公鑰)和私有密鑰(私鑰)。
公開密鑰與私有密鑰是一對,如果用公開密鑰對數據進行加密,只有用對應的私有密鑰才能解密;如果用私有密鑰對數據進行加密,那麼只有用對應的公開密鑰才能解密。因為加密和解密使用的是兩個不同的密鑰,所以這種演算法叫作非對稱加密演算法。
公鑰和私鑰是怎麼來的?
操作系統隨機生成一個隨機數,將這個隨機數通過某個函數進行運算,分成兩部分,公鑰和私鑰
優點:安全性高
缺點:加密與解密速度慢。
RSA、ECC(移動設備用)、Diffie-Hellman、El Gamal、DSA(數字簽名用)。
答案是不能
鑒於非對稱加密的機制,我們可能會有這種思路:伺服器先把公鑰直接明文傳輸給瀏覽器,之後瀏覽器向伺服器傳數據前都先用這個公鑰加密好再傳,這條數據的安全似乎可以保障了! 因為只有伺服器有相應的私鑰能解開這條數據 。
然而 由伺服器到瀏覽器的這條路怎麼保障安全? 如果伺服器用它的的私鑰加密數據傳給瀏覽器,那麼瀏覽器用公鑰可以解密它,而這個公鑰是一開始通過明文傳輸給瀏覽器的,這個公鑰被誰劫持到的話,他也能用該公鑰解密伺服器傳來的信息了。所以 目前似乎只能保證由瀏覽器向伺服器傳輸數據時的安全性 (其實仍有漏洞,下文會說)。
1、先通過非對稱加密技術,把對稱加密的密鑰X傳給對方,使得這個對稱加密的密鑰X是安全的
2、後面再通過對稱加密技術進行數據傳輸
詳細流程
(1)伺服器端擁有用於非對稱加密的 公鑰A 、 私鑰A』 。
(2)客戶端向網站伺服器請求,伺服器先把 公鑰A 明文給傳輸瀏客戶端
(3)客戶端隨機生成一個用於對稱加密的 密鑰X ,用 公鑰A 加密後傳給伺服器端。
(4)伺服器端拿到後用 私鑰A』 解密得到 密鑰X 。
(5)這樣雙方就都擁有 密鑰X 了,且別人無法知道它。之後雙方所有數據都用 密鑰X 加密解密。
數字簽名是基於公鑰密碼體制(非對稱密鑰密碼體制)的。
數字簽名必須保證以下三點:
上圖位用戶A使用數字簽名向用戶B傳輸一份文件的過程:
什麼時候使用這種不對文件加密,而對文件的摘要加密(對文件進行簽名)的技術呢?
注意: 這里強調的是只有「A公鑰」 上有認證機構CA的數字簽名,意思是CA用它的私鑰對「A公鑰」的內容進行單向散列函數得到的 加密摘要(數字簽名) ,該簽名放在「A公鑰」中(左上角那個),對於B用戶來說,它從可靠的路徑拿到CA的公鑰,使用CA的公鑰解密「A公鑰」的內容得到的128位的摘要 和 「A公鑰」的內容通過單向散列函數計算出來的是否一致,如果是表示認可這個「A公鑰」
當用戶A遺失或泄露了CA頒發的證書後,為了避免他人使用該證書冒充用戶A,用戶A向認證機構CA "掛失" 該證書。於是認證機構CA把該證書放入該認證機構的證書吊銷列表(CRL)中,並在網上公示。
用戶B在收到用戶A的公鑰時,除了要驗證該公鑰是否位認證機構頒發的,還要登錄認證機構的網站查看該公鑰是否已被認證機構吊銷變為無效證書。
認證機構CA的作用:
1、http連接很簡單,是無狀態的,明文傳輸。https協議 = http協議 + SSL,可以進行加密傳輸,身份認證
2、http連接的是80埠,https連接的是443埠
3、https協議需要伺服器端到CA申請SSL證書,即客戶端請求的時候,伺服器端發送SSL證書給客戶端,SSL證書內容包括公鑰、CA機構的數字簽名。驗證了伺服器端的身份以及公鑰的可靠性。 (注意:混合加密那裡「將公鑰A給客戶端」,嚴格的來說是把SSL證書給客戶端)
SSL提供以下三個功能
1、 SSL伺服器鑒別。允許用戶證實伺服器的身份。 具有SSL功能的瀏覽器維持一個表,上面有一些可信賴的認證中心CA和它們的公鑰
2、 SSL客戶鑒別。允許伺服器證實客戶的身份。
3、 加密的SSL會話,通過混合加密實現的 。客戶和伺服器交互的所有數據都是發送方加密,接受方解密
SSL的位置
(1)方法:get,post,head,put,delete,option,trace,connect
(2)URL欄位
(3)HTTP協議版本
User-Agent:產生請求的瀏覽器類型
Aceept:客戶端可識別的內容類型列表
Host:主機地址
200:請求被成功處理
301:永久性重定向
302:臨時性重定向
403:沒有訪問許可權
404:沒有對應資源
500:伺服器錯誤
503:伺服器停機
HTTP協議的底層使用TCP協議,所以HTTP協議的長連接和短連接在本質上是TCP層的長連接和短連接。由於TCP建立連接、維護連接、釋放連接都是要消耗一定的資源,浪費一定的時間。所對於伺服器來說,頻繁的請求釋放連接會浪費大量的時間,長時間維護太多的連接的話又需要消耗資源。所以長連接和短連接並不存在優劣之分,只是適用的場合不同而已。長連接和短連接分別有如下優點和缺點:
注意: 從HTTP/1.1版本起,默認使用長連接用以保持連接特性。 使用長連接的HTTP協議,會在響應消息報文段加入: Connection: keep-alive。TCP中也有keep alive,但是TCP中的keep alive只是探測TCP連接是否活著,而HTTP中的keep-alive是讓一個TCP連接獲得更久一點。
⑹ 二進制加密解密
簡單的異或加密,自己不寫是損失
==========
#include <cstdio>
using namespace std;
void binByte(char *bin, unsigned char b){
char i=7;
while(b>0){
bin[i]=(b&1)+'0';
b>>=1;
i--;
}
while(i>=0){
bin[i--]='0';
}
}
int main()
{
char *src="NCTV";
char bin[9]={0};
unsigned char *p=(unsigned char*)src;
unsigned char pwd=0x59;//1011001
unsigned char code;
while(*p!='\0'){
code=*p^pwd;
binByte(bin,*p);
printf("%c %u %s 加密成 %u ",*p,*p,bin,code);
binByte(bin,code);
printf("%s 解密成",bin);
code^=pwd;
binByte(bin,code);
printf(" %c %u %s",code,code,bin);
printf("\n");
p++;
}
return 0;
}
==============
輸出:
N 78 01001110 加密成 23 00010111 解密成 N 78 01001110
C 67 01000011 加密成 26 00011010 解密成 C 67 01000011
T 84 01010100 加密成 13 00001101 解密成 T 84 01010100
V 86 01010110 加密成 15 00001111 解密成 V 86 01010110
========