Невозможно создать правильный хэш SHA256 - PullRequest
1 голос
/ 28 июня 2019

Я работаю над проектом, в котором мне нужно создать хеш 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 дня. Любая помощь будет оценена. Заранее спасибо

1 Ответ

0 голосов
/ 28 июня 2019

Для SHA-256 я использую этот простой код, надеюсь, он вам поможет

fun encryptToSha256(data: String): String {
    val digest = MessageDigest.getInstance("SHA-256")
    digest.update(data.toByteArray())
    return bytesToHexString(digest.digest())
}

private fun bytesToHexString(bytes: ByteArray): String {
    val sb = StringBuffer()
    for (i in bytes.indices) {
        val hex = Integer.toHexString(0xFF and bytes[i].toInt())
        if (hex.length == 1) {
            sb.append('0')
        }
        sb.append(hex)
    }
    return sb.toString()
}
...