gpt4 book ai didi

swift - 在 jwt.io 上使用 PKCS8 RSA256 算法对 JWT 进行编码,但不在应用程序中

转载 作者:行者123 更新时间:2023-11-28 06:03:32 25 4
gpt4 key购买 nike

当我尝试在 swift 4 中实现 JWT 时遇到问题。我使用来自 jwt.io 的 JWT 库。我正在尝试使用 PKCS8 pem 文件类型和 RSA256 算法证书加密有效负载。但总是出现错误消息“操作无法完成。(OSStatus 错误 -50 - 从数据创建 RSA 私钥失败)”

谁能帮帮我?

代码:

let payload: [AnyHashable:Any] = ["payload":"hiden_information"]
let algorithmName = "RS256"
let path = Bundle.main.path(forResource: "priv", ofType: "pem")
let privateKeySecretData = try? Data(contentsOf: URL(fileURLWithPath: path!))
let privateKey = String(data: privateKeySecretData!, encoding: .utf8)!

let signDataHolder: JWTAlgorithmRSFamilyDataHolder = JWTAlgorithmRSFamilyDataHolder()
_ = signDataHolder.keyExtractorType(JWTCryptoKeyExtractor.privateKeyWithPEMBase64().type)
_ = signDataHolder.algorithmName(algorithmName)
_ = signDataHolder.secret(privateKey)

let signBuilder : JWTEncodingBuilder = JWTEncodingBuilder.encodePayload(payload)
_ = signBuilder.addHolder(signDataHolder)

let signResult = signBuilder.result
if ((signResult?.successResult) != nil) {
print(signResult!.successResult.encoded)
} else {
print(signResult?.errorResult.error.localizedDescription ?? "Unknown")
}

最佳答案

JWT 版本 3.0.0.-beta7 不支持 PKCS8。我将 PKCS1 与 RSA256 结合使用,它成功了!

 func encryptPayload(payload:[AnyHashable:Any])->String?
{
var resultStr: String?

var publicKeyCrypto: JWTCryptoKeyProtocol? = nil
do {
publicKeyCrypto = try JWTCryptoKeyPublic(pemEncoded: AppConstant.Scurity.publicKey, parameters: nil)
}
catch {
NSLog("error: \(error)")
}

guard let theCrypto = publicKeyCrypto else {
return nil
}

do {

let privateKeyCrypto = try JWTCryptoKeyPrivate(pemEncoded: privateKey, parameters: nil)

guard let holder = JWTAlgorithmRSFamilyDataHolder().signKey(privateKeyCrypto)?.secretData(AppConstant.Scurity.privateKey.data(using: .utf8))?.algorithmName(JWTAlgorithmNameRS256) else {return nil}

let headers : [AnyHashable:Any] = ["alg": "RS256","typ": "JWT"]

guard let encoding = JWTEncodingBuilder.encodePayload(payload).headers(headers)?.addHolder(holder) else {return nil}

let result = encoding.result

print(result?.successResult?.encoded ?? "Encoding failed")
print(result?.errorResult?.error ?? "No encoding error")

let verifyDataHolder = JWTAlgorithmRSFamilyDataHolder().signKey(theCrypto)?.secretData(publicKey.data(using: .utf8)!)?.algorithmName(JWTAlgorithmNameRS256)

let verifyResult = JWTDecodingBuilder.decodeMessage(result?.successResult?.encoded).addHolder(verifyDataHolder)?.result

if verifyResult?.successResult != nil, let result = verifyResult?.successResult.encoded {
print("Verification successful, result: \(result)")
} else {
print("Verification error: \(verifyResult!.errorResult.error)")
}
resultStr = result?.successResult.encoded
} catch {
print(error)
}
return resultStr
}

关于swift - 在 jwt.io 上使用 PKCS8 RSA256 算法对 JWT 进行编码,但不在应用程序中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48863168/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com