【问题标题】:SHA256 Swift to Objective C equivalenceSHA256 Swift 到 Objective C 的等效性
【发布时间】:2018-11-18 22:31:16
【问题描述】:

大家好,我是第一次使用 SHA256,我正在尝试按照教程进行操作,我的问题是在 SHA 256 的 Objective C 中编写等效项。我正在尝试了解我的功能在下面向您展示,但我仍然对如何在此 Swift 函数的 Objective C 中找到等价性有疑问

let rsa2048Asn1Header:[UInt8] = [
        0x30, 0x82, 0x01, 0x22, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86,
        0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x82, 0x01, 0x0f, 0x00
    ]

 private func sha256(data : Data) -> String {
        var keyWithHeader = Data(bytes: rsa2048Asn1Header)
        keyWithHeader.append(data)
        var hash = [UInt8](repeating: 0,  count: Int(CC_SHA256_DIGEST_LENGTH))
        keyWithHeader.withUnsafeBytes {
            _ = CC_SHA256($0, CC_LONG(keyWithHeader.count), &hash)
        }
        return Data(hash).base64EncodedString()
    }

你能帮帮我吗?

【问题讨论】:

  • search了吗?
  • 我试图查看许多示例,但我不想在 Objective C 中的等效函数中出错......它们看起来彼此非常不同
  • 试试吧!如果你在 Swift 和 ObjC 中得到了理智的结果,你就找到了正确的解决方案。实际上 Stackoverflow 并不是一个代码编写/代码转换服务。

标签: ios objective-c swift nsdata sha256


【解决方案1】:

在 Objective-C 中处理原始字节通常比 Swift 简单一些。这样的实现应该是等价的。

#define RSA_2048_ASN1_HDR_LEN 24

- (NSString *)sha256:(NSData *)data {
    NSMutableData *keyWithHeader = [NSMutableData dataWithBytes:rsa2048Asn1Header length:RSA_2048_ASN1_HDR_LEN];
    [keyWithHeader appendData:data];
    UInt8 hash[CC_SHA256_DIGEST_LENGTH] = { 0 };
    CC_SHA256(keyWithHeader.bytes, (CC_LONG) keyWithHeader.length, hash);
    return [[NSData dataWithBytes:hash length:CC_SHA256_DIGEST_LENGTH] base64EncodedStringWithOptions:0];
}

请注意,您还需要将通用加密库导入到您的 Objective-C 文件中:

#import <CommonCrypto/CommonDigest.h>

【讨论】:

    猜你喜欢
    • 2013-02-09
    • 1970-01-01
    • 2015-10-05
    • 2014-08-15
    • 1970-01-01
    • 2019-03-23
    • 1970-01-01
    • 1970-01-01
    • 2014-03-21
    相关资源
    最近更新 更多