Я работаю над проектом, в котором мне нужно создать хеш SHA256 в соответствии с шагами, показанными ниже, и сравнить его с существующим хешем для проверки.
Ниже упомянуты шаги, упомянутые для создания хэша:
Hashing logic for Mobile Number :
Sha256(Sha256(Mobile+SharePhrase))*number of times last digit of Aadhaar number
(Ref ID field contains last 4 digits).
Example :
Mobile: 1234567890
Aadhaar Number:XXXX XXXX 3632
Passcode : Lock@487
Hash: Sha256(Sha256(1234567890Lock@487))*2
Я делаю это так
byte[] digCloneOutput = new byte[32];
private void getPhoneHash(String numberToHash) {
String phn = (getPhn+""+ed_shareCode.getText().toString().trim());
Log.e("phn", phn);
MessageDigest md = null;
byte[] digest;
byte[] digClone = new byte[0];
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT) {
digest = phn.getBytes(Charset.forName("UTF-8"));
digClone = digest.clone();
}
try
{
md = MessageDigest.getInstance("SHA-256");
}
catch (NoSuchAlgorithmException e)
{
throw new IllegalStateException("SHA-256 hash should be available", e);
}
for(int i = 0; i< 2; i++){
md.update(digClone);
digClone = md.digest();
Log.e("Intermediate hash",""+ digClone);
}
for (int i = 0; i < digClone.length; i++)
{
digCloneOutput[i] = (byte) (digClone[i]*lastDigAdhr);
// md.update(digClone);
// printDigest("Intermediate hash", digClone);
}
printDigest( digCloneOutput);
}
public void printDigest(byte[] digest)
{
StringBuffer hexString = new StringBuffer();
for (int i = 0; i < digest.length; i++) {
String hex = Integer.toHexString(0xff & digest[i]);
if(hex.length() == 1) hexString.append('0');
hexString.append(hex);
}
Log.e("Final HashString to compare", String.valueOf(hexString));
}
Окончательный хэш, с которым я должен сравнивать, выглядит следующим образом
6d0af38001b278389875d2119a187ac5d4df16f5dd75fa5272499059c1149803
но хеш, созданный моей логикой, никогда не совпадает с оригинальным хешем.
Я борюсь с этим за последние 2 дня. Любая помощь будет оценена. Заранее спасибо