【问题标题】:How to write a hash function in Android similar to the Python function?如何在Android中编写类似于Python函数的哈希函数?
【发布时间】:2017-03-15 08:14:48
【问题描述】:

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

这是python函数,效果很好。

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

我想在我的 Android 应用程序中实现相同的功能。希望有高手能尽快帮忙。

【问题讨论】:

    标签: android python encryption hash cryptography


    【解决方案1】:

    你可以试试下面的代码sn -p,

    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

    【讨论】:

    • 谢谢,我会在实施后评论。
    【解决方案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。

    【讨论】:

    • @谢谢你,我会在实施后反馈。
    猜你喜欢
    • 2010-12-13
    • 2012-09-08
    • 2012-05-03
    • 2010-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-04
    相关资源
    最近更新 更多