2011-08-16 78 views
0

我一直在尋找的例子來說明如何使用DES Cypher和OpenSSL的頭用C編碼的東西,我發現這一個:http://www.codealias.info/technotes/des_encryption_using_openssl_a_simple_exampleC:DES加密問題

的代碼幾乎是完美的,但我沒有那麼專家在此東西,用C我的C知識沒有那麼大,因爲我用它在PIC和AVR微控制器...

代碼

總之:

printf("Clear text\t : %s \n",clear); 
memcpy(encrypted,Encrypt(key,clear,sizeof(clear)), sizeof(clear)); 
printf("Encrypted text\t : %s \n",encrypted); 
memcpy(decrypted,Decrypt(key,encrypted,sizeof(clear)), sizeof(clear)); 
printf("Decrypted text\t : %s \n",decrypted); 

正如你可以看到,的sizeof(清)是用作字符串的大小......問題在於我們知道這個例子文本字符串的大小...但是當我通過網絡發送此文本時,其他計算機不知道它...

如何解決此問題...我不太明白爲什麼我需要將原始字符串的大小解密:S

謝謝!

+4

我只是想提一提,脂肪酶真不該使用DES ...這是壞了。 3DES(三重DES)是一個更好的選擇。 –

+1

@Jeremy 3DES實際上是同樣好的舊DES應用3次。 DES沒有損壞,現在只有64位(或實際上是56位)的密鑰太短,但雙倍長度的3DES密鑰仍然可以。沒有實現DES就不能實現3DES。 – qrdl

+0

@ qrdl 3DES是DES應用,然後反向應用,然後重新應用,並且比DES強得多。 DES在任何需要傳輸安全數據的受監管行業中都未得到批准,而3DES在大多數情況下獲得批准。它並不是最強大的,但它應該被認爲是所有新作品的最低數據加密標準。 –

回答

3

The world is full of bad security systems designed by people who read Applied Cryptography.

不要在電線發送自己的 'encryptyed' 的東西。你錯過了一個HMAC,你錯過了一個密鑰交換協議,你錯過了一個線框協議(這正是你的問題的答案'我怎麼知道這個尺寸')。只需使用像TLS/SSL這樣的現成協議即可。 gnu-tls爲SSL/TLS提供了一個簡單易用的API,openssl也支持它,但使用起來非常麻煩。無論你做什麼,都不要開始編寫自己的協議,因爲密鑰交換錯誤或'優化隨機數'或缺少幀簽名或其他問題,你會想出另一個破解的'加密'協議。

這裏用的是GNU-TLS一個簡單的例子:Simple client example using the C++ API

+0

我正在用C編寫程序,所以使用C++的東西現在變成了一種痛苦......無論如何,我不需要過分的安全性,數據在這裏並不那麼重要......但基本的安全性(用C語言)來加密一些數據併發送回去會很有用...... – TCB13

+2

還有很多C例子可用,如http://www.gnu.org/software/gnutls/manual/html_node/簡單的客戶端 - 例如與 - 匿名authentication.html#簡單的客戶端,例如,用匿名認證。 '加密某些數據廣告回傳的基本安全性'=您需要SSL/TLS。沒有比這更簡單的了。 –

+0

謝謝...... Remus Rusanu,我現在會用那個殺死我的頭。 – TCB13

2

在我見過的DES的實現中,我只記得看到相同大小的明文和密文。 Wikipedia seems to confirm this。由於DES在64位塊上工作,只要執行DES的代碼正確填充輸入以匹配那些64位邊界,就會產生這種效果。實際上,這幾乎就是block cipher(這就是DES的定義)的定義。

因此,我會打賭你會看到它與另一臺使用加密文本大小的計算機完美地工作。你自己的一些測試應該能夠絕對確認這一點。

另外,我堅信Jeremy的評論,DES在大多數情況下是一種很差的加密算法選擇。三重DES或AES是更好的選擇。