zoukankan      html  css  js  c++  java
  • Swift-AES之加密解密

    什么是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
    
        }
    }
  • 相关阅读:
    JavaScript的BOM编程,事件-第4章
    C#获取程序目录
    e3商城_day05
    第三届中国云计算用户大会笔记和心得
    Android应用源码 概览
    电脑用bat脚本给手机批量自动安装apk文件 autoInstall.bat
    网上的很多Android项目源码有用吗?Android开发注意的地方。
    Android 简历 怎么写? 月薪10K,20K+, 怎么拿到面试?
    android 职业 转行
    我的Python学习之路(2)
  • 原文地址:https://www.cnblogs.com/Free-Thinker/p/8067371.html
Copyright © 2011-2022 走看看