出乎意料的零散列密码
Unexpectedly nil hashing a password
我正在尝试使用 SHA256 方法散列密码:
class CryptoHandler {
static func sha256(_ str: String) -> String? {
let data = str.data(using: String.Encoding.utf8)
let shaData = sha256(data!)
let rc = String(data: shaData, encoding: String.Encoding.utf8) as String?
return rc
}
static func sha256(_ data: Data) -> Data { var res = [UInt8](repeating: 0, count: Int(CC_SHA256_DIGEST_LENGTH)); data.withUnsafeBytes { _ = CC_SHA256([=10=], CC_LONG(data.count), &res) }; return Data(bytes: res) }
static func getHashedPassword (pwd: String) -> String{
let hash = sha256(pwd)
return hash!
}
}
当我尝试执行 getHashedPassword ("0123456789")
时,我在 return hash!
行中出现以下错误:
Thread 1: Fatal error: Unexpectedly found nil while unwrapping an
Optional value
为什么会这样?我该如何解决?
let rc = String(data: shaData, encoding: String.Encoding.utf8) as String?
将 return 为 nil 值,并且您在 getHashedPassword
方法中使用 return hash!
常量末尾的 return hash!
感叹号强制编译一个值。
您可以通过接受可选值
修改 getHashedPassword
方法来修复它
例如:
static func getHashedPassword (pwd: String) -> String?
{
let hash = sha256(pwd)
return hash
}
发生崩溃是因为您无法从加密的 Data
创建 String
。您必须使用 base64
或 hex
表示。
此代码创建了一个 hex
编码字符串并且根本不使用可选值。
class CryptoHandler {
static func sha256(_ str: String) -> String {
let data = Data(str.utf8)
let shaData = sha256(data)
return shaData.hexString
}
static func sha256(_ data: Data) -> Data {
var res = [UInt8](repeating: 0, count: Int(CC_SHA256_DIGEST_LENGTH));
data.withUnsafeBytes { _ = CC_SHA256([=10=], CC_LONG(data.count), &res) };
return Data(bytes: res)
}
static func getHashedPassword (pwd: String) -> String{
let hash = sha256(pwd)
return hash
}
}
extension Data {
var hexString : String {
return self.map{ String(format:"%02x", [=10=]) }.joined()
}
}
CryptoHandler.getHashedPassword(pwd:"0123456789")
我正在尝试使用 SHA256 方法散列密码:
class CryptoHandler {
static func sha256(_ str: String) -> String? {
let data = str.data(using: String.Encoding.utf8)
let shaData = sha256(data!)
let rc = String(data: shaData, encoding: String.Encoding.utf8) as String?
return rc
}
static func sha256(_ data: Data) -> Data { var res = [UInt8](repeating: 0, count: Int(CC_SHA256_DIGEST_LENGTH)); data.withUnsafeBytes { _ = CC_SHA256([=10=], CC_LONG(data.count), &res) }; return Data(bytes: res) }
static func getHashedPassword (pwd: String) -> String{
let hash = sha256(pwd)
return hash!
}
}
当我尝试执行 getHashedPassword ("0123456789")
时,我在 return hash!
行中出现以下错误:
Thread 1: Fatal error: Unexpectedly found nil while unwrapping an Optional value
为什么会这样?我该如何解决?
let rc = String(data: shaData, encoding: String.Encoding.utf8) as String?
将 return 为 nil 值,并且您在 getHashedPassword
方法中使用 return hash!
常量末尾的 return hash!
感叹号强制编译一个值。
您可以通过接受可选值
修改getHashedPassword
方法来修复它
例如:
static func getHashedPassword (pwd: String) -> String?
{
let hash = sha256(pwd)
return hash
}
发生崩溃是因为您无法从加密的 Data
创建 String
。您必须使用 base64
或 hex
表示。
此代码创建了一个 hex
编码字符串并且根本不使用可选值。
class CryptoHandler {
static func sha256(_ str: String) -> String {
let data = Data(str.utf8)
let shaData = sha256(data)
return shaData.hexString
}
static func sha256(_ data: Data) -> Data {
var res = [UInt8](repeating: 0, count: Int(CC_SHA256_DIGEST_LENGTH));
data.withUnsafeBytes { _ = CC_SHA256([=10=], CC_LONG(data.count), &res) };
return Data(bytes: res)
}
static func getHashedPassword (pwd: String) -> String{
let hash = sha256(pwd)
return hash
}
}
extension Data {
var hexString : String {
return self.map{ String(format:"%02x", [=10=]) }.joined()
}
}
CryptoHandler.getHashedPassword(pwd:"0123456789")