我该如何计算摘要

时间:2016-10-31 14:05:42

标签: ios swift base64 sha1 digest

我想与银行建立联系,正如我在cardlink文档中看到的那样,他们想要计算摘要。

这个计算的主要思想是这个

Digest=base64( sha-1( utf8bytes(value1|value2|...|secret) ) )

MessageDigestmdigest = MessageDigest.getInstance("SHA-1");
byte[] digestResult =digest.digest(concatString.getBytes("UTF-8"));
String calculatedDigest = Base64.encode(digestResult);

这是他们对java的代码。

我开始手动测试,但我坚持使用字节转换。

this is the finall step for base64

this is for sha-1

所以我的主要问题是如何将转换转换为字节,如果有人知道使用swift(ios)的方法,那将会有很大的帮助。

提前致谢

修改

这是我得到的示例字符串:

2.045020311114033331503343429780020454510MDAwMDAwMDAwMDAwMDA2ODkzOTI=https://myeshop.gr/orders/Payment_Okhttps://myeshop.gr/orders/Payment_FailEURO123

这就是我想要的结果:

wXRSbgCX2Kq6gSOVE6+c9VpvSRQ=

1 个答案:

答案 0 :(得分:2)

这是你需要的吗?

import UIKit

extension String {
    func sha1() -> String {
        let data = self.dataUsingEncoding(NSUTF8StringEncoding)!
        var digest = [UInt8](count:Int(CC_SHA1_DIGEST_LENGTH), repeatedValue: 0)
        CC_SHA1(data.bytes, CC_LONG(data.length), &digest)
        let hexBytes = digest.map { String(format: "%02hhx", $0) }
        return hexBytes.joinWithSeparator("")
    }

    func sha1Data() -> NSData {
        let data = self.dataUsingEncoding(NSUTF8StringEncoding)!
        var digest = [UInt8](count:Int(CC_SHA1_DIGEST_LENGTH), repeatedValue: 0)
        CC_SHA1(data.bytes, CC_LONG(data.length), &digest)
        let digestData = NSData(bytes: digest, length: digest.count)
        return digestData
    }
}


class TestSHA1Digest: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        if let b64 = calculateDigest("2.045020311114033331503343429780020454510MDAwMDAwMDAwMDAwMDA2ODkzOTI=https://myeshop.gr/orders/Payment_Okhttps://myeshop.gr/orders/Payment_FailEURO123") {
            print("SHA1: \(b64)")
        } else {
            print("Calcuate SHA1 failed")
        }
    }

    func calculateDigest(data: String) -> String? {
        let shaData = data.sha1Data()
        return shaData.base64EncodedStringWithOptions(NSDataBase64EncodingOptions(rawValue: 0))
    }
}

[输出] SHA1:wXRSbgCX2Kq6gSOVE6 + c9VpvSRQ =

PS。我使用的是swift 2 + Xcode 7.3.1。如果你使用swift 3,请告诉我。