package com.dji.sample.territory.utils;
|
|
import org.bouncycastle.crypto.digests.SM3Digest;
|
import org.bouncycastle.util.encoders.Hex;
|
|
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());
|
// 图片文件路径
|
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 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();
|
byte[] inputBytes = input.getBytes();
|
digest.update(inputBytes, 0, inputBytes.length);
|
byte[] hash = new byte[digest.getDigestSize()];
|
digest.doFinal(hash, 0);
|
return hash;
|
}
|
|
}
|