带有HashAlgorithm“ SHA-256”签名的JSON传递base64数据

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了带有HashAlgorithm“ SHA-256”签名的JSON传递base64数据相关的知识,希望对你有一定的参考价值。

我似乎无法在网上找到与此有关的帮助。

我有一个SQL开发人员创建的JSON端点,我需要发布以下JSON来接收我的数据。


    "Command": "abc",
    "Data": "base64(xData)",
    "Signature" : "xyz"

xData是JSON格式的数据或RSA加密的JSON格式的数据(如果已分发公钥)。签名为Base64(xdata)十六进制中的HashAlgorithm“ SHA-256”]

我已经学会了对base 64进行编码。

let combinedString = "sebastien"
let data = combinedString.data(using: .utf8)//Here combinedString is your string
let encodingString = data?.base64EncodedString()
print(encodingString!)

我的问题是:-如何在基础64 xData上添加SHA-256签名?-如何撤消该过程并使用签名来确认xData是否受到好评?-如何对64位xData进行解码?

答案

最终代码如下:

let str = "John"
if let base64Str = str.base64Encoded() 
  print("Base64 encoded string: \"\(base64Str)\"")
  let data = base64Str.sha256Signature()
  print("SHA256 Signature on the encoded base64 data: \"\(data)\"")
  if let trs = base64Str.base64Decoded() 
    print("Base64 decoded string: \"\(trs)\"")
  

extension String 

    func sha256Signature() -> String
        if let stringData = self.data(using: String.Encoding.utf8) 
            return hexStringFromData(input: digest(input: stringData as NSData))
        
        return ""
    

    private func digest(input : NSData) -> NSData 
        let digestLength = Int(CC_SHA256_DIGEST_LENGTH)
        var hash = [UInt8](repeating: 0, count: digestLength)
        CC_SHA256(input.bytes, UInt32(input.length), &hash)
        return NSData(bytes: hash, length: digestLength)
    

    private  func hexStringFromData(input: NSData) -> String 
        var bytes = [UInt8](repeating: 0, count: input.length)
        input.getBytes(&bytes, length: input.length)

        var hexString = ""
        for byte in bytes 
            hexString += String(format:"%02x", UInt8(byte))
        

        return hexString
    


以上是关于带有HashAlgorithm“ SHA-256”签名的JSON传递base64数据的主要内容,如果未能解决你的问题,请参考以下文章

windows 查看文件 MD2 MD4 MD5 SHA1 SHA256 SHA384 SHA512码

无所不在的哈希算法

散列密码的最佳实践 - SHA256 还是 SHA512?

使用SHA-256和RSA 2048进行加密和签名

[Python中具有SHA256的base64 HMAC

Google Play 签名 SHA256 指纹发布一次后会改变吗?