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;
|
}
|
|
}
|