swift版的TOTPGenerator

今天在swift組件模塊化的時(shí)候,有一個(gè)生成動(dòng)態(tài)口令的功能,發(fā)現(xiàn)使用的谷歌的OC類,很是不爽。
于是就自己寫一個(gè)了一個(gè)動(dòng)態(tài)口令解密的代碼
原來舊代碼展示:

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的實(shí)現(xiàn)

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())

運(yùn)行正常顯示完成

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容