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

Swift中如何通过OpenSSL的RIPEMD160获取指定格式哈希值

iOS OpenSSL RIPEMD160 哈希字节转十六进制字符串实现

核心逻辑

调用RIPEMD160得到的20字节UInt8数组,只需要逐位转换为两位的十六进制字符,拼接后就是你需要的哈希字符串。
另外你当前的测试代码存在两处可优化/修正的点:

  • 计算公钥HASH160(SHA256+RIPEMD160)时,应该直接使用SHA256输出的原始32字节二进制数据作为RIPEMD160的输入,不需要先转成十六进制字符串再取UTF8编码,会导致计算结果错误
  • RIPEMD160 C函数的第二个参数是输入数据的字节长度,不能直接写死为RIPEMD160_DIGEST_LENGTH

字节转十六进制字符串工具实现

可以通过Swift扩展实现通用的字节数组转十六进制方法:

extension Sequence where Element == UInt8 {
    /// 转换为小写十六进制字符串
    var hexString: String {
        return self.map { String(format: "%02hhx", $0) }.joined()
    }
    /// 转换为大写十六进制字符串
    var hexStringUppercased: String {
        return self.map { String(format: "%02hhX", $0) }.joined()
    }
}

修正后的完整测试代码

import CryptoKit // 用于SHA256计算,你也可以用OpenSSL的SHA256实现
// 此处需保证你已正确引入OpenSSL的RIPEMD160相关头文件

let publicKey = "04981891480BC21B0AFE20FAF8F49FB1618E80769D0956A730B8409E856CB9512B4778CB346C211065050E008412C29B0474EA56AEA3761DBD75655B4FBD252E39"

// 1. 把公钥十六进制字符串转成原始二进制字节
guard let pubKeyData = Data(hexString: publicKey) else {
    fatalError("公钥格式错误")
}

// 2. 计算公钥的SHA256原始字节
let sha256Data = SHA256.hash(data: pubKeyData)
let sha256Bytes = [UInt8](sha256Data)

// 3. 计算SHA256结果的RIPEMD160哈希
var ripemd160Bytes = [UInt8](repeating: 0, count: Int(RIPEMD160_DIGEST_LENGTH))
_ = sha256Bytes.withUnsafeBufferPointer { buf in
    RIPEMD160(buf.baseAddress, sha256Bytes.count, &ripemd160Bytes)
}

// 4. 转换为你需要的十六进制字符串
let ripemd160Hex = ripemd160Bytes.hexString
print(ripemd160Hex) // 输出格式即为你需要的40位十六进制哈希字符串

如果你的项目没有现成的十六进制字符串转Data的实现,可以用以下扩展:

extension Data {
    init?(hexString: String) {
        let len = hexString.count / 2
        var data = Data(capacity: len)
        var index = hexString.startIndex
        for _ in 0..<len {
            let nextIndex = hexString.index(index, offsetBy: 2)
            guard let byte = UInt8(hexString[index..<nextIndex], radix: 16) else {
                return nil
            }
            data.append(byte)
            index = nextIndex
        }
        self = data
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 13:54:03