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加密的主要内容,如果未能解决你的问题,请参考以下文章