ServerCrypto 是一个 Swift 库,可以简化服务器端密码学操作。
要在你的项目中使用 ServerCrypto,将这行代码添加到你的 Package.swift
文件中
.package(url: "https://github.com/alexaubry/ServerCrypto", from: "1.0.0")
在使用该库之前,请确保已安装 OpenSSL。
在 macOS 上,你需要提供以下标志才能从命令行构建或测试
swift build -Xswiftc -I/usr/local/opt/openssl/include -Xlinker -L/usr/local/opt/openssl/lib
要计算字节序列的哈希值,你需要使用 Hasher
的一个实例。
Hasher
可以为 Data
, [UInt8]
以及任何符合 Bytes
协议的类型生成哈希值。
支持以下哈希算法
.md4 .md5 .sha1 .sha224 .sha256 .sha384 .sha512 .ripeMd160
要计算一个字符串的 SHA-256 哈希值,编写以下代码
import Hash
let hasher = Hasher.sha256
let messageData = "Hello world".data(using: .utf8)!
let hashData = try hasher.makeHash(for: messageData) // Returns a Data object
let hashHexString = hashData.hexString
要创建 HMAC 签名,你需要:
你需要使用 Signer
的一个实例来生成 HMAC 签名。任何 Hasher
支持的类型,Signer
也支持。
要计算一个字符串的 SHA-256 HMAC,你需要遵循以下步骤
1- 使用密码创建一个 HMAC 密钥
import Signature
let key = try HMACKey(password: "secret")
2- 创建一个 HMAC 签名器
let signer = Signer.hmac(key)
3- 获取消息的 HMAC
let messageData = "Hello world".data(using: .utf8)!
let hmacData = signer.sign(messageData, with: .sha256) // Returns a Data object
let hmacHexString = hmacData.hexString
要验证 HMAC 签名对于你期望的消息是否有效,你需要:
你需要使用 Signer
的一个实例来验证 HMAC 签名。签名必须是一个 Data
对象。预期消息可以是任何 Hasher
支持的类型。
要验证一个字符串的 SHA-256 HMAC,你需要遵循以下步骤
1- 使用预期的密码创建一个 HMAC 密钥
import Signature
let key = try HMACKey(password: "secret")
2- 创建一个 HMAC 签名器
let signer = Signer.hmac(key)
3- 验证消息的 HMAC
let hmacData = ...
let messageData = "Hello world".data(using: .utf8)!
let isValid = signer.verify(signature: hmacData, for: messageData, with: .sha256) // Returns a Bool
Signature.framework 可以使用私钥和诸如 RSA 和 ECDSA 之类的算法来生成签名。
要创建签名,你需要:
你需要使用 Signer
的一个实例来生成签名。任何 Hasher
支持的类型,Signer
也支持。
要计算一个字符串的 SHA-256 ECDSA 签名,你需要遵循以下步骤
1- 从 PEM 文件加载私钥
import Signature
let privateKey = try AsymmetricKey.makePrivateKey(readingPEMAtPath: "path/to/public/key.pem", passphrase: "...")
你也可以使用 AsymmetricKey.makePrivateKey(readingPEMData: Data,passphrase: String?)
从内存中加载 PEM 密钥。
2- 创建一个非对称签名器
let signer = Signer.asymmetric(privateKey)
3- 获取消息的签名
let messageData = "Hello world".data(using: .utf8)!
let hmacData = signer.sign(messageData, with: .sha256) // Returns a Data object
let hmacHexString = hmacData.hexString
要验证签名对于你期望的消息是否有效,你需要:
你需要使用 Signer
的一个实例来验证签名。签名必须是一个 Data
对象。预期消息可以是任何 Hasher
支持的类型。
要验证字符串的 SHA-256 ECDSA 签名对于公钥是否有效,你需要遵循以下步骤
1- 从 PEM 文件加载公钥
import Signature
let publicKey = try AsymmetricKey.makePublicKey(readingPEMAtPath: "path/to/private/key.pem")
你也可以使用 AsymmetricKey.makePublicKey(readingPEMData: Data)
从内存中加载密钥。
2- 创建一个非对称签名器
let signer = Signer.asymmetric(publicKey)
3- 验证消息的签名
let hmacData = ...
let messageData = "Hello world".data(using: .utf8)!
let isValid = signer.verify(signature: hmacData, for: messageData, with: .sha256) // Returns a Bool
Alexis Aubry, me@alexaubry.fr
你可以在 Twitter 上找到我:@_alexaubry
ServerCrypto 遵循 MIT 许可协议。 更多信息请查看 LICENSE 文件。