package org.tio.sitexxx.server.utils;

import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

/**
 * <pre>
 *    @author : vagrancy
 *    e-mail : 18050829067@163.com
 *    time   : 2026-03-11 18:26
 *    desc   :
 * </pre>
 */
public class Sha256Util {
    /**
     * 将字节数组转换为十六进制字符串
     */
    private static String bytesToHex(byte[] bytes) {
        StringBuilder sb = new StringBuilder();
        for (byte b : bytes) {
            // %02x 表示转换为两位小写十六进制，不足补0
            sb.append(String.format("%02x", b));
        }
        return sb.toString();
    }

    /**
     * 生成 SHA-256 哈希值 (十六进制格式 - 最常用)
     * 结果长度：64 个字符
     */
    public static String sha256Hex(String input) {
        try {
            MessageDigest digest = MessageDigest.getInstance("SHA-256");
            // 获取字节数组，务必指定编码 (推荐 UTF-8)
            byte[] encodedHash = digest.digest(input.getBytes(StandardCharsets.UTF_8));
            return bytesToHex(encodedHash);
        } catch (NoSuchAlgorithmException e) {
            // SHA-256 是标准算法，理论上不会抛出此异常
            throw new RuntimeException("SHA-256 algorithm not found", e);
        }
    }

    // 测试主函数
    public static void main(String[] args) {
        String originalString = "";

        String hexResult = sha256Hex(originalString);

        System.out.println("原始字符串: " + originalString);
        System.out.println("SHA-256 (Hex):   " + hexResult);

        // 验证长度
        System.out.println("Hex 长度: " + hexResult.length());       // 应为 64
    }
}
