ios swift SHA1加密

Posted

技术标签:

【中文标题】ios swift SHA1加密【英文标题】:Ios swift SHA1 encryption 【发布时间】:2017-06-17 18:33:59 【问题描述】:

在我的 android 应用程序中,我有一个散列字符串,我想将它与来自编辑文本的常规字符串进行比较。我使用以下方法来做到这一点

try 
         MessageDigest hashDigester = MessageDigest.getInstance("SHA-1");
     catch (NoSuchAlgorithmException e) 
        e.printStackTrace();
    
return (new BigInteger(1, hashDigester.digest(pin.getBytes())).toString(16)).equals(object.getPin());

上面的代码工作正常。现在我想在 ios 中使用 swift 3.0 做同样的事情 我尝试使用 CryptoSwift 从这样的编辑文本创建哈希

text.sha1()

我也尝试使用下面的

extension Data 


    func hexString() -> String 
        let string = self.mapString(format:"%02x", Int($0)).joined()
        return string
    


    func SHA1() -> Data 
        var result = Data(count: Int(CC_SHA1_DIGEST_LENGTH))
        _ = result.withUnsafeMutableBytes resultPtr in
            self.withUnsafeBytes (bytes: UnsafePointer<UInt16>) in
                CC_SHA1(bytes, CC_LONG(count), resultPtr)
            
        
        return result
    



extension String 

    func hexString() -> String 
        return self.data(using: .utf8)!.hexString()
    

    func SHA1() -> String 
        return self.data(using: .utf8)!.SHA1().hexString()
    


两者都给了我相同的结果,但与我的 android 代码不同。 你有什么建议我应该如何调整我的 swift 代码?

【问题讨论】:

你能否举一个你在 Android 和 iOS 上执行 sha-1 的字符串示例(此代码)? 当我在 ios 中插入 407 时,它会返回 35db01d3926745bec110d5709a544e250f7fffc4 ,而在 android 中相同的 407 返回 e6de89674d9f1d7968a70dad4f41b844965b4fdc 这是正确的 【参考方案1】:

您可以添加一些小的改进来缩短您在 Swift 4 中的代码:

extension Data 

    var hexString: String 
        return map  String(format: "%02hhx", $0) .joined()
    

    var sha1: Data 
        var digest = [UInt8](repeating: 0, count: Int(CC_SHA1_DIGEST_LENGTH))
        self.withUnsafeBytes(
            _ = CC_SHA1($0, CC_LONG(self.count), &digest)
        )
        return Data(bytes: digest)
    



extension String 

    var hexString: String 
        return self.data(using: .utf8)!.hexString
    

    var sha1: Data 
        return self.data(using: .utf8)!.sha1
    


【讨论】:

【参考方案2】:

这是我的错!正确的函数我传递了错误的输入

【讨论】:

以上是关于ios swift SHA1加密的主要内容,如果未能解决你的问题,请参考以下文章

iOS开发-MD5加密SHA1加密

iOS---sha1加密的一个坑

iOS 中MD5和sha1加密

Java Sha1 加密算法

sha1加密处理中文时在js和php中不一样怎么办!如何处理!!!

Objective-C 与JAVA的SHA1/HmacSHA1加密算法实现