2010-03-14 40 views
1

我正在寫一個Java應用程序,它可以「加密」並因此「解密」任何二進制文件。如何在Java中加密/解密文件?

我只是「密碼學」領域的初學者,所以我想爲一開始寫一個非常簡單的應用程序。

對於讀取原始文件,我可能會使用java.io.FileInputStream類來獲取文件的「字節數組」byte originalBytes[]

然後,我可能會使用一些非常簡單的密碼,例如「每一個字節由1上移」,然後我就得到了「加密」字節byte encryptedBytes[],讓我們說,我還設置了「密碼」它,例如「123456789」。

接下來,當有人想「解密」這個文件,他必須輸入密碼(「123456789」)第一,該文件可能被解密後(因此「每個字節下移」)和隨後通過java.io.FileOutputStream保存到輸出文件。


我只是想知道如何將密碼信息「存儲」到加密文件中,以便解密應用程序知道輸入的密碼和「真實」密碼是否相等?

將密碼(例如密碼字母的ASCII序號)添加到文件開頭(加密數據之前)可能很愚蠢。


所以我的主要問題是如何存儲的密碼信息加密文件

回答

5

它可能會更容易不檢查用戶提供的全局密碼的密碼,而是確保只有一個密碼(由用戶知道)將密文解密爲正確的明文,任何其他密碼將返回亂碼。這通常是密碼學的工作原理,意味着您不必在任何地方存儲集中密碼。

2

使用密碼來加密您的數據。 例如,您可以重複輸入密碼,以便它字節數組的長度相匹配,然後像做

​​

編輯:如果你想存儲密碼,你就必須對它進行加密。其中 - 至少在使用對稱密碼系統時 - 本質上是不安全的。

2

不要把它存儲在那裏!任何良好的加密都基於數學算法(如AES)。您可能想看看BouncyCastle http://www.bouncycastle.org/ - 但加密不是一個簡單的主題,所以您應該先閱讀一本好書,以便首先了解它的基本知識!

2

嘗試下面給出的樣品。你可以將字節轉換爲字符串,然後加密,然後寫入文件。在解密時反轉它。

http://www.exampledepot.com/egs/javax.crypto/desstring.html

下面u能找到一個樣本DES ENC &月的文件..

http://www.exampledepot.com/egs/javax.crypto/DesFile.html

+0

你可以在java cryptography api中找到所有類型的算法。 你也可以使用AES,DES,RSA和簡單的密碼。 – 2010-03-14 13:33:52

+0

你也可以用加密函數和與密碼文件direclty匹配來驗證輸入密碼。 – 2010-03-14 13:35:43

1

A到使用密碼加密非常簡單的方法是使用XOR,這裏是一些僞代碼

for(byte in file) 
{ 
    Byte newByte = byte^(byte) password[i]; 
    outputFile.write(newByte); 
    i = (i + 1) password.length(); 
} 

這是基於(x XOR y)XOR y = x的身份,你所有的人要做的事情是使用相同的密碼進行加密/解密。

+0

xoring一個較小的密鑰用秒填充。的問題。這就是爲什麼xoring不用於加密的原因。如果密碼大小與文件大小相同,這將是有益的,這將是不切實際的... – 2012-04-06 05:43:27