私はJavaでアプリケーションを作成しています。ユーザーが選択したパスワードを使用してファイル(またはフォルダ - 私はディレクトリを圧縮します)を暗号化できるようにします。私は、ファイルが生成される前に、ユーザーが正しいパスワードを入力したことを確認できるようにしたいプログラムよりユーザーフレンドリーを作るために、しかしPBE:復号化を試みる前にパスワードを確認する
static Cipher createCipher(int mode, String password) throws Exception {
PBEKeySpec keySpec = new PBEKeySpec(password.toCharArray());
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("PBEWithMD5AndDES");
SecretKey key = keyFactory.generateSecret(keySpec);
MessageDigest md = MessageDigest.getInstance("MD5");
md.update("input".getBytes());
byte[] digest = md.digest();
byte[] salt = new byte[8];
for (int i = 0; i < 8; ++i)
salt[i] = digest[i];
PBEParameterSpec paramSpec = new PBEParameterSpec(salt, 20);
Cipher cipher = Cipher.getInstance("PBEWithMD5AndDES");
cipher.init(mode, key, paramSpec);
return cipher;
}
static void applyCipher(String inFile, String outFile, Cipher cipher) throws Exception {
String decryption = "";
CipherInputStream in = new CipherInputStream(new FileInputStream(inFile), cipher);
BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(outFile));
int BUFFER_SIZE = 8;
byte[] buffer = new byte[BUFFER_SIZE];
int numRead = 0;
do {
numRead = in.read(buffer);
System.out.println(buffer + ", 0, " + numRead);
if (numRead > 0){
out.write(buffer, 0, numRead);
System.out.println(toHexString(buffer, 0, numRead));
}
} while (numRead == 8);
in.close();
out.flush();
out.close();
}
private static char[] hex_table = {
'0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
'a', 'b', 'c', 'd', 'e', 'f'};
public static String toHexString(byte[] data, int offset, int length)
{
StringBuffer s = new StringBuffer(length*2);
int end = offset+length;
for (int i = offset; i < end; i++)
{
int high_nibble = (data[i] & 0xf0) >>> 4;
int low_nibble = (data[i] & 0x0f);
s.append(hex_table[high_nibble]);
s.append(hex_table[low_nibble]);
}
return s.toString();
}
:私は現在、以下の方法(複数可)を持っています。私は「ドアのマットの下に鍵を置いておく」、あるいは完全にセキュリティを元に戻すことはしません - ユーザーが間違ったパスワードを入力すると間違ったファイルが生成されないようにしたい...
アイデア大変感謝します。それ以上の詳細が必要な場合は、お気軽にお問い合わせください。
ありがとうございます。
このようなものを実装する場合は、ユーザーが選択したファイルを圧縮しますが、パスワードの確認に使用される非常に小さいファイル(1バイト)を追加してファイルの内容を確認します。 –