如何在Android中编写类似于Python函数的哈希函数?

时间:2016-11-02 05:01:29

标签: android python encryption hash cryptography

我目前正在开发分布式系统应用程序。我想在Android应用程序中验证Python生成的哈希值。我有一个python方法在给定的字符串变量中进行散列。

这是python函数,效果很好。

 hash_value = hashlib.sha1("PARAMETER123".encode("UTF-8")).hexdigest()

我想在我的Android应用程序中实现相同的功能。我希望有些专家可以尽快提供帮助。

2 个答案:

答案 0 :(得分:2)

您可以尝试以下代码段

String text = "PARAMETER123";

MessageDigest md = MessageDigest.getInstance("SHA-1");
byte[] textBytes = text.getBytes("UTF-8");
md.update(textBytes, 0, textBytes.length);
byte[] sha1hash = md.digest();

String encrypted_text = = convertToHex(sha1hash);

convertToHex()方法

private static String convertToHex(byte[] data) {
        StringBuilder buf = new StringBuilder();
        for (byte b : data) {
            int halfbyte = (b >>> 4) & 0x0F;
            int two_halfs = 0;
            do {
                buf.append((0 <= halfbyte) && (halfbyte <= 9) ? (char) ('0' + halfbyte) : (char) ('a' + (halfbyte - 10)));
                halfbyte = b & 0x0F;
            } while (two_halfs++ < 1);
        }
        return buf.toString();
    }

这会将基于 UTF-8 的文本转换为 SHA1 十六进制。

参考:https://stackoverflow.com/a/5980789/2506025

答案 1 :(得分:2)

以下是Java的简单SHA1方法:

String sha1Hash( String toHash )
{
    String hash = null;
    try
    {
        MessageDigest digest = MessageDigest.getInstance( "SHA-1" );
        byte[] bytes = toHash.getBytes("UTF-8");
        digest.update(bytes, 0, bytes.length);
        bytes = digest.digest();

        // This is ~55x faster than looping and String.formating()
        hash = bytesToHex( bytes );
    }
    catch( NoSuchAlgorithmException e )
    {
        e.printStackTrace();
    }
    catch( UnsupportedEncodingException e )
    {
        e.printStackTrace();
    }
    return hash;
}

// http://stackoverflow.com/questions/9655181/convert-from-byte-array-to-hex-string-in-java
final protected static char[] hexArray = "0123456789ABCDEF".toCharArray();
public static String bytesToHex( byte[] bytes )
{
    char[] hexChars = new char[ bytes.length * 2 ];
    for( int j = 0; j < bytes.length; j++ )
    {
        int v = bytes[ j ] & 0xFF;
        hexChars[ j * 2 ] = hexArray[ v >>> 4 ];
        hexChars[ j * 2 + 1 ] = hexArray[ v & 0x0F ];
    }
    return new String( hexChars );
}

您可以包含这些方法并调用sha1hash。