使用 Java 进行 SHA-512 哈希

问题描述 投票:0回答:5

我想知道是否可以在 Android Studio 上对字符串进行 SHA-512 哈希计算不加盐

我看过其他问题,但它们都涉及

salt
,但我想要这样的东西:

TestBox.text = sha512("Hello, world!");

并且

TextBox
将读取为
c1527cd893c124773d811911970c8fe6e857d6df5dc9226bd8a160614c0cd963a4ddea2b94bb7d36021ef9d865d5cea294a82dd49a0bb269f51f6e7a57f79421
;

java hash sha512
5个回答
17
投票

您看到的其他问题使用盐,所以不要像这样使用盐:

MessageDigest md = MessageDigest.getInstance("SHA-512");
byte[] digest = md.digest("Hello, world!".getBytes());
StringBuilder sb = new StringBuilder();
for (int i = 0; i < digest.length; i++) {
    sb.append(Integer.toString((digest[i] & 0xff) + 0x100, 16).substring(1));
}
System.out.println(sb);

基于此答案


6
投票

Keds 的例子是正确的,但是 .length 总是大于 32, (127) 所以更正确的答案应该是

private fun getSHA512(input:String):String{
    val md: MessageDigest = MessageDigest.getInstance("SHA-512")
    val messageDigest = md.digest(input.toByteArray())

    // Convert byte array into signum representation
    val no = BigInteger(1, messageDigest)

    // Convert message digest into hex value
    var hashtext: String = no.toString(16)

    // Add preceding 0s to make it 128 chars long
    while (hashtext.length < 128) {
        hashtext = "0$hashtext"
    }



    // return the HashText
    return hashtext
}

2
投票

kotlin中计算sha-512的方法

 fun getSHA256(input:String):String{
    return MessageDigest
        .getInstance("SHA-256")
        .digest(input.toByteArray())
        .fold("") { str, it -> str + "%02x".format(it) }
}

0
投票

更实用的解决方案:

fun sha512(input: String): String {
        return MessageDigest.getInstance("SHA-512")
            .digest(input.toByteArray())
            .joinToString(separator = "") {
                ((it.toInt() and 0xff) + 0x100)
                    .toString(16)
                    .substring(1) 
            }
    }

-2
投票

我猜 Kotlin 中的等价物是:

fun encriptar(cadena: String): String {

    var md: MessageDigest = MessageDigest.getInstance("SHA-512")
    var digest = md.digest(cadena.toByteArray())
    var sb: StringBuilder = StringBuilder()

    var i = 0
    while (i < digest.count()) {
        sb.append(((digest[i] and 0xff.toByte()) + 0x100).toString(16).substring(0, 1))
        i++
    }

    return sb.toString()
}
© www.soinside.com 2019 - 2024. All rights reserved.