:PHP에서 salt와 똑같은 해싱을 사용합니까? (SHA-256)
$orig_pw = "abcd";
$salt = 5f8f041b75042e56;
$password = hash('sha256', $orig_pw . $salt);
(. 이것은 내가 그것을 구현하는 방법 아니다, 이것은 단지 예입니다 소금은 개인에 따라 다릅니다)
그리고
bc20a09bc9b3d3e1fecf0ed5742769726c93573d4133dbd91e2d309155fa9929
하지만 자바에서 동일한 작업을 시도하면, 나는 다른 결과를 얻을 :이, 저장된 암호입니다.
public byte[] getHash(String password, byte[] salt) throws NoSuchAlgorithmException {
MessageDigest digest = MessageDigest.getInstance("SHA-256");
digest.reset();
digest.update(salt);
try {
return digest.digest(password.getBytes("UTF-8"));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return null;
}
public byte[] hexStringToByteArray(String s) {
int len = s.length();
byte[] data = new byte[len/2];
for (int i = 0; i < len; i += 2) {
data[i/2] = (byte) ((Character.digit(s.charAt(i), 16) << 4)
+ Character.digit(s.charAt(i+1), 16));
}
return data;
}
결과는 다음과 같습니다 : 진수로 코딩
/¬1¶ĆĽëüFd?[$?¶»_9ËZ»ç¶S‘Ęŗש
는 꿈에도되지 않습니다 :
2fac31b6434c14ebfc46643f5b243fb6bb5f39cb5abb10e7b65391454c97d7a90d0a
나는
String password = "abcd";
byte[] salt = hexStringToByteArray("5f8f041b75042e56");
try {
System.out.println(new String(getHash(password, salt)));
} catch (NoSuchAlgorithmException e1) {
e1.printStackTrace();
}
그리고 두 가지 방법을 시도
수있는 사람 h 이것으로 엘프?
hash('sha256', $salt . $orig_pw);
그래서 해시 소금이 교환됩니다
나는 모든 단어를 이해하지 못한다 (영어가 아님). 그래서 자바에서 소금을 바꿔야합니까? (예 : byte [] salt = "5f8f041b75042e56".getBytes();) 또한 자바에서 어떻게 바꿀 수 있습니까? – RuntimeException
실제 PHP 코드가 어떻게 생겼는지 모르겠습니다. 게시 된 코드는 노출 된 16 진수 문자열 때문에 실행되지 않습니다. 그러나 당신은 "abcd"를 해시 한 것 같습니다. "5f8f041b75042e56"'. Java에서 해당 기능을 수행하려면'("password"+ "salt"). getBytes ("UTF-8")'을 수행 한 다음이를 소화해야합니다. –
코드를 사용하여 죄송합니다. 구현 방법이 아닙니다. 실제 코드는 난수를 얻습니다 : $ salt = dechex (mt_rand (0, 2147483647)). dechex (mt_rand (0, 2147483647)); – RuntimeException