美文网首页
swift版的TOTPGenerator

swift版的TOTPGenerator

作者: 笙笔记 | 来源:发表于2023-04-26 16:26 被阅读0次

今天在swift组件模块化的时候,有一个生成动态口令的功能,发现使用的谷歌的OC类,很是不爽。
于是就自己写一个了一个动态口令解密的代码
原来旧代码展示:

let gtmString = GTMStringEncoding()
        let secretData = gtmString.base32Decode(keyString)
        let generator = TOTPGenerator.init(secret: secretData, algorithm: "SHA1", digits: 6, period: TOTPGenerator.defaultPeriod())
        let str = generator?.generateOTP(for: Date())

我们采用swift OneTimePassword
pod引入

 pod 'OneTimePassword'

swift TOTPGenerator的实现

import OneTimePassword
class TOTPGenerator {
    private var totpGenerator: Generator?

    init?(secret: Data) {
        guard let generator = Generator(
            factor: .timer(period: 30),
            secret: secret,
            algorithm: .sha1,
            digits: 6) else {
                return nil
        }
        self.totpGenerator = generator
    }

    func generateOTP(for date: Date = Date()) -> String? {
        guard let generator = self.totpGenerator else { return nil }
        do {
            let password = try generator.password(at: date)
            return password
        } catch {
            return nil
        }
    }
}

最后使用方法改完之后的新代码:

 guard let secretData = base32Decode(keyString) else { return }
        let generator = TOTPGenerator(secret: secretData)
        let str = generator?.generateOTP(for: Date())

运行正常显示完成

相关文章

网友评论

      本文标题:swift版的TOTPGenerator

      本文链接:https://www.haomeiwen.com/subject/bwvvjdtx.html