📜  sha1 - Java (1)

📅  最后修改于: 2023-12-03 15:20:07.266000             🧑  作者: Mango

SHA1 - Java

SHA1 (Secure Hash Algorithm 1) is a cryptographic hashing algorithm. In Java, it is provided by the java.security package which is a part of the Java Cryptography Extension (JCE).

Usage

To use SHA1 in Java, we can get an instance of MessageDigest and use its digest method to hash the input data.

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class SHA1Example {
    public static void main(String[] args) throws NoSuchAlgorithmException {
        String input = "hello world";
        MessageDigest sha1 = MessageDigest.getInstance("SHA1");
        byte[] hash = sha1.digest(input.getBytes());
        
        // Convert bytes to hex format
        StringBuilder hexString = new StringBuilder();
        for (byte b : hash) {
            String hex = Integer.toHexString(0xff & b);
            if (hex.length() == 1) hexString.append('0');
            hexString.append(hex);
        }
        
        System.out.println("Hash value: " + hexString.toString());
    }
}

In the above example, we first get an instance of MessageDigest for SHA1 algorithm. Then, we use the digest method to hash the input data (in this case, the string "hello world"). We then convert the resulting hash bytes to a hex string and print it to the console.

Security

While SHA1 is still widely used, it is no longer considered secure for many applications. In 2017, Google announced that they had successfully generated a SHA1 collision (i.e., two different inputs that produce the same hash). As a result, SHA1 is no longer recommended for use in new cryptographic applications.

Reference
# SHA1 - Java

SHA1 (Secure Hash Algorithm 1) 是一种加密哈希算法。在Java中,它由`java.security`包提供,这是Java Cryptography Extension (JCE)的一部分。

## 用法

要在Java中使用SHA1,我们可以获取`MessageDigest`的实例,并使用其`digest`方法来对输入数据进行哈希。

```java
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class SHA1Example {
    public static void main(String[] args) throws NoSuchAlgorithmException {
        String input = "hello world";
        MessageDigest sha1 = MessageDigest.getInstance("SHA1");
        byte[] hash = sha1.digest(input.getBytes());
        
        // Convert bytes to hex format
        StringBuilder hexString = new StringBuilder();
        for (byte b : hash) {
            String hex = Integer.toHexString(0xff & b);
            if (hex.length() == 1) hexString.append('0');
            hexString.append(hex);
        }
        
        System.out.println("Hash value: " + hexString.toString());
    }
}

在上面的示例中,我们首先获取SHA1算法的MessageDigest实例。然后,我们使用digest方法来对输入数据进行哈希(在本例中为字符串“hello world”)。然后,我们将结果哈希字节转换为十六进制字符串,并将其打印到控制台上。

安全性

虽然SHA1仍被广泛使用,但它已不再被许多应用程序视为安全。2017年,Google宣布他们成功生成了一个SHA1冲突(即产生相同哈希值的两个不同输入)。因此,不再建议在新的加密应用程序中使用SHA1。

参考资料
  • [Java MessageDigest API文档](https://docs.oracle.com/en/java/javase/16/docs/api/java.base/java/security/MessageDigest.html)
  • [SHA-1 - 维基百科](https://en.wikipedia.org/wiki/SHA-1)