| | |
| | | package com.dji.sample.territory.utils; |
| | | |
| | | import org.bouncycastle.crypto.digests.SM3Digest; |
| | | import org.bouncycastle.crypto.params.ECPrivateKeyParameters; |
| | | import org.bouncycastle.crypto.signers.SM2Signer; |
| | | import org.bouncycastle.jce.provider.BouncyCastleProvider; |
| | | import org.bouncycastle.util.encoders.Hex; |
| | | |
| | | import java.io.File; |
| | | import java.io.FileInputStream; |
| | | import java.io.IOException; |
| | | import org.bouncycastle.jce.provider.BouncyCastleProvider; |
| | | |
| | | import java.io.*; |
| | | import java.math.BigInteger; |
| | | import java.nio.charset.StandardCharsets; |
| | | import java.security.Security; |
| | | import java.util.Scanner; |
| | | |
| | | public class SM3HashExample { |
| | | public static void main(String[] args) { |
| | | File file=new File("C:\\Users\\a1679\\Desktop\\pic.txt"); |
| | | System.out.println(HaXi(file)); |
| | | System.out.println(HaXi("123")); |
| | | } |
| | | public static StringBuilder HaXi(File file) { |
| | | // 向Java安全提供者列表中添加Bouncy Castle提供者 |
| | | Security.addProvider(new BouncyCastleProvider()); |
| | |
| | | } |
| | | return hexString; |
| | | } |
| | | public static StringBuilder HaXi(String input) { |
| | | // 向Java安全提供者列表中添加Bouncy Castle提供者 |
| | | Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider()); |
| | | |
| | | try { |
| | | SM3Digest digest = new SM3Digest(); |
| | | |
| | | // 将字符串转换为字节数组 |
| | | byte[] inputBytes = input.getBytes("UTF-8"); |
| | | |
| | | // 使用ByteArrayInputStream包装字节数组 |
| | | try (ByteArrayInputStream bis = new ByteArrayInputStream(inputBytes)) { |
| | | byte[] buffer = new byte[1024]; |
| | | int bytesRead; |
| | | |
| | | // 读取字节数组并更新哈希值 |
| | | while ((bytesRead = bis.read(buffer)) != -1) { |
| | | digest.update(buffer, 0, bytesRead); |
| | | } |
| | | |
| | | // 计算哈希值 |
| | | byte[] hash = new byte[digest.getDigestSize()]; |
| | | digest.doFinal(hash, 0); |
| | | |
| | | // 将哈希值转换为十六进制字符串 |
| | | StringBuilder hexString = new StringBuilder(); |
| | | for (byte b : hash) { |
| | | String hex = Integer.toHexString(0xff & b).toUpperCase(); |
| | | if (hex.length() == 1) { |
| | | hexString.append('0'); |
| | | } |
| | | hexString.append(hex); |
| | | } |
| | | |
| | | // 返回哈希值的十六进制字符串 |
| | | return hexString; |
| | | } |
| | | } catch (IOException e) { |
| | | e.printStackTrace(); |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | public static byte[] calculateSM3Hash(String input) { |
| | | SM3Digest digest = new SM3Digest(); |
| | |
| | | } |
| | | |
| | | } |
| | | |