You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现将任意4位数字转换为MD5哈希值?

解决方案:将任意4位数字转换为指定格式的MD5哈希值

Got it, let's break this down step by step. First, we confirm the core logic from your example: the 4-digit number 6357 is converted to the string "6357", hashed via MD5, then converted to a uppercase 32-character hex string to get DF3AEBC649F9E3B674EEB790A4DA224E. Below is a Java implementation that matches your MessageDigest import requirement and integrates with a simulated security system.

Step 1: Implement the MD5 Conversion Utility

This method handles two critical points: ensuring input is a valid 4-digit string (including leading zeros like "0012") and formatting the MD5 result to match your example's uppercase style.

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class SecuritySystem {
    // Your provided validation MD5 value
    private static final String VALID_MD5 = "DF3AEBC649F9E3B674EEB790A4DA224E";

    public static void main(String[] args) {
        // Test the example: verify 6357's MD5 matches the given value
        String testResult = generate4DigitMD5("6357");
        System.out.println("MD5 for 6357: " + testResult);
        System.out.println("Matches example: " + testResult.equals(VALID_MD5));

        // Test another 4-digit number (with leading zeros)
        System.out.println("MD5 for 0001: " + generate4DigitMD5("0001"));
    }

    /**
     * Converts a 4-digit numeric string to an uppercase MD5 hash
     * @param fourDigitStr Must be a 4-character string of digits (e.g., "6357", "0012")
     * @return Uppercase 32-character MD5 string, or null if input is invalid
     */
    private static String generate4DigitMD5(String fourDigitStr) {
        // Validate input format first
        if (fourDigitStr == null || !fourDigitStr.matches("\\d{4}")) {
            System.err.println("Input must be a 4-digit numeric string");
            return null;
        }

        try {
            // Get MD5 message digest instance
            MessageDigest md = MessageDigest.getInstance("MD5");
            // Convert the input string to bytes (UTF-8/ASCII works for digits)
            byte[] inputBytes = fourDigitStr.getBytes();
            // Compute the MD5 hash
            byte[] md5Bytes = md.digest(inputBytes);
            // Convert byte array to uppercase hex string
            StringBuilder sb = new StringBuilder();
            for (byte b : md5Bytes) {
                sb.append(String.format("%02X", b));
            }
            return sb.toString();
        } catch (NoSuchAlgorithmException e) {
            // MD5 is a standard algorithm, this exception is unlikely
            e.printStackTrace();
            return null;
        }
    }
}

Step 2: Key Details to Note

  • Input Handling: If your input is an int (e.g., 12), convert it to a 4-digit string with leading zeros first using String.format("%04d", 12) to get "0012"—this ensures consistent hash results.
  • Encoding Consistency: We use the default string encoding (UTF-8/ASCII) since numeric characters are identical in both, which aligns with your example's logic.
  • Case Format: The example uses uppercase, so we use %02X in the formatter. Switch to %02x if you need lowercase.

Quick Note on MD5 Security

As you mentioned, MD5 is no longer considered secure for high-stakes use cases like password storage or digital signatures due to known collision vulnerabilities. But for your simulated security system needs, this implementation will work perfectly.

内容的提问来源于stack exchange,提问作者user9453652

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:54:05