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 java.math.BigInteger; import java.security.Security; public class SM3HashExample { public static StringBuilder HaXi(File file) { // 向Java安全提供者列表中添加Bouncy Castle提供者 Security.addProvider(new BouncyCastleProvider()); // 图片文件路径 try (FileInputStream fis = new FileInputStream(file)) { SM3Digest digest = new SM3Digest(); byte[] buffer = new byte[1024]; int bytesRead; // 读取文件并更新哈希值 while ((bytesRead = fis.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 StringBuilder str(String s) { // 向Java安全提供者列表中添加Bouncy Castle提供者 Security.addProvider(new BouncyCastleProvider()); // 要进行哈希计算的字符串 String input = s; // 计算SM3哈希值 byte[] hash = calculateSM3Hash(input); // 将哈希值转换为十六进制字符串 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; } public static byte[] calculateSM3Hash(String input) { SM3Digest digest = new SM3Digest(); byte[] inputBytes = input.getBytes(); digest.update(inputBytes, 0, inputBytes.length); byte[] hash = new byte[digest.getDigestSize()]; digest.doFinal(hash, 0); return hash; } }