簡體   English   中英

如何用Java加密/解密文件?

[英]How to encrypt/decrypt a file in Java?

我正在編寫一個Java應用程序,該程序可以“加密”並因此“解密”任何二進制文件。

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

為了讀取原始文件,我可能會使用java.io.FileInputStream類來獲取文件的“字節數組” byte originalBytes[]

然后,我可能會使用一些非常簡單的密碼,例如“ 將每個字節上移1個字節 ”,然后我將獲得“加密” byte encryptedBytes[]並假設我還將為其設置一個“密碼”,例如“ 123456789”。

接下來,當有人要“解密”該文件時,他必須先輸入密碼(“ 123456789”),然后才能解密該文件(因此“ 將每個字節向下移1 ”)並因此保存到輸出文件中通過java.io.FileOutputStream


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

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


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

不檢查用戶提供的密碼是否與全局密碼相對應更容易,而是確保僅一個密碼(用戶已知)將密文解密為正確的明文,其他任何密碼都將返回亂碼。 這通常是密碼學的工作方式,這意味着您不必在任何地方存儲集中式密碼。

也許這個開源庫可以幫助您:

http://www.jasypt.org/

使用密碼來加密您的數據。 例如,您可以重復密碼,使其與字節數組的長度匹配,然后執行類似的操作

data[i] = data[i] >> password[i];

編輯:如果要存儲密碼,則必須對其進行加密。 至少在使用對稱密碼系統時,這本質上是不安全的。

不要將其存儲在那里! 任何好的加密都是基於數學算法(例如AES)。 您可能想看看BouncyCastle http://www.bouncycastle.org/-但是加密不是一個簡單的話題,因此您應該首先獲得一本好書,以了解其基本知識!

嘗試下面給出的示例。 您可以將字節轉換為字符串,然后進行加密,然后將其寫入文件。 解密時將其反轉。

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

您可以在下面找到文件的示例DES enc&dec。

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

使用密碼加密的一種非常簡單的方法是使用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的標識,您所需要做的就是使用相同的密碼進行加密/解密。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM