私はPBKDF2
生成ハッシュとしてDBのパスワードの記憶を仕様するJava認証サブシステムに取り組んでいます。今ではSHA1
かSHA512
をPFRとして使用するかどうかを決定しようとしています。私は両方の仕様を調べましたが、それらは非常に数学的に集中しており、私はそれに従っています。 PBKDF2WithHmacSHA512
がPBKDF2WithHmacSHA1
とどのように違うのかを、より良い暗号理解の人が説明できますか?ここでPBKDF2WithHmacSHA512対。 PBKDF2WithHmacSHA1
は私がやろうとしているものです:
private static final int HASH_BYTE_SIZE = 64; // 512 bits
private static final int PBKDF2_ITERATIONS = 1000;
// generate random salt
SecureRandom random = new SecureRandom();
byte salt[] = new byte[SALT_BYTE_SIZE]; // use salt size at least as long as hash
random.nextBytes(salt);
// generate Hash
PBEKeySpec spec = new PBEKeySpec(password, salt, PBKDF2_ITERATIONS, HASH_BYTE_SIZE);
SecretKeyFactory skf = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1"); // we would like this to be "PBKDF2WithHmacSHA512" instead? What Provider implements it?
byte[] hash = skf.generateSecret(spec).getEncoded();
// convert hash and salt to hex and store in DB as CHAR(64)...
右はスピード(または欠落)が重要です。しかし、PBKDF2には調整可能な作業係数が含まれています。したがって、SHA512対SHA1の相対速度は無関係です。 –