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

如何在libGDX中生成SHA256?需支持全平台且不依赖第三方库

Great question! Generating SHA-256 from a String in libGDX across all four target platforms (desktop, Android, iOS, web) without relying on third-party libraries is totally feasible. The key is to use Java's standard cryptography APIs while ensuring compatibility with GWT (the web backend for libGDX). Here's a complete, cross-platform solution:

Cross-Platform SHA-256 Implementation for libGDX

Core Approach

The solution leverages Java's built-in MessageDigest class, which is supported across all libGDX targets (including GWT for web). We'll follow these steps:

  • Convert the input string to a byte array using UTF-8 encoding (critical for consistent hashes across platforms).
  • Initialize a MessageDigest instance for SHA-256.
  • Compute the hash from the byte array.
  • Convert the raw hash bytes to a human-readable hexadecimal string (optional but common use case).

Working Code

Place this utility class in your libGDX core module so it's accessible to all platforms:

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

public class CryptoUtils {
    /**
     * Generates a SHA-256 hash from the input string, returned as a hexadecimal string.
     * Works across all libGDX platforms: desktop, Android, iOS, web.
     * @param input The string to hash
     * @return SHA-256 hash as a 64-character hex string
     */
    public static String sha256(String input) {
        try {
            // Get SHA-256 digest instance
            MessageDigest digest = MessageDigest.getInstance("SHA-256");
            // Convert input string to UTF-8 bytes and compute hash
            byte[] hashBytes = digest.digest(input.getBytes(StandardCharsets.UTF_8));
            
            // Convert raw bytes to hexadecimal string
            StringBuilder hexBuilder = new StringBuilder();
            for (byte b : hashBytes) {
                // Convert byte to unsigned hex value
                String hex = Integer.toHexString(0xFF & b);
                // Pad single-character hex values with a leading zero
                if (hex.length() == 1) {
                    hexBuilder.append('0');
                }
                hexBuilder.append(hex);
            }
            return hexBuilder.toString();
        } catch (NoSuchAlgorithmException e) {
            // SHA-256 is a standard algorithm, this exception should never occur on supported platforms
            throw new RuntimeException("SHA-256 algorithm not found (this is a platform bug)", e);
        }
    }
}

Platform Compatibility Breakdown

  • Desktop/Android/iOS: Uses the native Java/Android/iOS MessageDigest implementation, which fully supports SHA-256. No extra configuration needed.
  • Web (GWT): libGDX's GWT backend includes emulation for the MessageDigest class and SHA-256. As long as you're using a recent libGDX version (1.9.10+), this code will work without modifications.

Key Notes

  • UTF-8 Encoding: Always use StandardCharsets.UTF_8 instead of the default platform charset. Default charsets can vary between systems, leading to inconsistent hash results for the same input string.
  • Raw Byte Option: If you need the raw hash byte array instead of a hex string, simply return hashBytes directly from the method.
  • Exception Handling: We wrap NoSuchAlgorithmException in a RuntimeException because SHA-256 is a mandatory standard for all modern Java implementations—this exception should never be thrown in practice.

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:28:56