• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

Swift-AES之加密解密

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

什么是AES

高级加密标准(英语:Advanced Encryption Standard,缩写:AES),在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。经过五年的甄选流程,高级加密标准由美国国家标准与技术研究院(NIST)于2001年11月26日发布于FIPS PUB 197,并在2002年5月26日成为有效的标准。2006年,高级加密标准已然成为对称密钥加密中最流行的算法之一。

Swift怎么使用

使用CryptoSwift框架https://github.com/krzyzanowskim/CryptoSwift
其所支持的加密解密方式

Hash

Cyclic Redundancy Check (CRC)

Cipher
Message authenticators
Cipher block mode
  • Electronic codebook (ECB)
  • Cipher-block chaining (CBC)
  • Propagating Cipher Block Chaining (PCBC)
  • Cipher feedback (CFB)
  • Output Feedback (OFB)
  • Counter (CTR)
Data padding

按照github上的提示安装导入后可以直接调用

try AES(key: key, iv: iv, blockMode: .ECB).encrypt((ps?.arrayOfBytes())!, padding: PKCS7())
  • 1

但是对于每次使用都这么写的话有些麻烦,我们可以封装成一个类供我们使用:

import CryptoSwift


class DataEncoding: NSObject {

    //AES-ECB128加密
    static func Endcode_AES_ECB(strToEncode:String)->String
    {

        let ps = strToEncode.dataUsingEncoding(NSUTF8StringEncoding)

        var encrypted: [UInt8] = []

        let key: [UInt8] = ("YourKey".dataUsingEncoding(NSUTF8StringEncoding)?.arrayOfBytes())!
        let iv: [UInt8] = []

        do {
            encrypted = try AES(key: key, iv: iv, blockMode: .ECB).encrypt((ps?.arrayOfBytes())!, padding: PKCS7())



        } catch AES.Error.BlockSizeExceeded {
            // block size exceeded
        } catch {
            // some error
        }

        let encoded = NSData.init(bytes: encrypted)


        //加密结果要用Base64转码
        return encoded.base64EncodedStringWithOptions(NSDataBase64EncodingOptions.Encoding64CharacterLineLength)
    }


        //AES-ECB128解密
    static func Decode_AES_ECB(strToDecode:String)->String
    {
        //decode base64
        let data = NSData(base64EncodedString: strToDecode, options: NSDataBase64DecodingOptions.init(rawValue: 0))

        let encrypted = data!.arrayOfBytes()



        var decrypted: [UInt8] = []

        let key: [UInt8] = ("YourKey".dataUsingEncoding(NSUTF8StringEncoding)?.arrayOfBytes())!
        let iv: [UInt8] = []

        do {

            decrypted = try AES(key: key, iv: iv, blockMode: .ECB).decrypt(encrypted, padding: PKCS7())



        } catch AES.Error.BlockSizeExceeded {
            // block size exceeded
        } catch {
            // some error
        }

        let encoded = NSData.init(bytes: decrypted)


        var str = ""
        //解密结果要从Base64转码回来
        str = String(data: encoded, encoding: NSUTF8StringEncoding)!

        return str
    }



    //字符串sha1值
    static func Encode_SHA1(str:String)->String
    {

        let data = NSData.init(bytes: (str.dataUsingEncoding(NSUTF8StringEncoding)?.arrayOfBytes())!)

        var sha1 = data.sha1String()

        print(sha1)
        return sha1

    }
}

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Swiftの函数式编程-Jenaral发布时间:2022-07-13
下一篇:
IOS---OC与Swift混编(转)发布时间:2022-07-13
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap