swift 5.0 RSA+AES加密插件CryptoSwift以及SwiftyRSA的使用

本文介绍如何在Swift中使用SwiftyRSA和CryptoSwift插件实现RSA和AES加密解密操作,包括生成随机AES密钥、使用RSA公钥加密AES密钥及使用AES密钥加密数据等步骤。


前言

一般APP通讯都要进行加密来保护数据 本文介绍了 swift 5.0 CryptoSwift 以及 SwiftyRSA 的使用。


举个栗子:

{“requestData”:“WsKJFYXD/678VaunPL6lJ41vmCqoQQk8mM6khEdA/o+BQYTdjSrT33foU6eiEwcrF7ZfhiMM3ukP1hpFHHFgyfvO9b9z+Jj8a2vtsHopG/w=”, “encrypted”:“B+rDLUA9jyFmV7ybpg2JA3N04CKKHijD3ji69JX3upoK1steRj4PrOAftvv2qaFmOVUEb5P0iU9QdDIi6Nlxd/HY1yuDNxW61SCBASVLfvfPu+0uk+/GneRGMISGweuaJhcASUorgjU2vgumZgnQRRdLnRQdzBuVK84BDeH+Xf0=”}

上面json数据的加密逻辑 :
1.随机生成16位 AES 加密密钥 aes_key 。
2.使用aes_key对要传输的真实数据进行AES加密得到requestData。
3.使用RSA公钥对aes_key进行RSA加密得到encrypted字段数据。

你需要的解密逻辑
1.使用RSA私钥对encrypted进行RSA解密,得到aes_key.
2.使用aes_key对requestData进行AES解密,得到最终真实数据result

一、SwiftyRSA介绍

https://github.com/TakeScoop/SwiftyRSA
RSA加密的一款插件

二、CryptoSwift介绍

https://github.com/krzyzanowskim/CryptoSwift
swift 编写的一款综合加密插件,支持MD5,SHA,AES等各种加密

三、使用方法

1.引入库

代码如下(示例):

import SwiftyRSA
import CryptoSwift

2.SwiftyRSA插件RSA加密

代码如下(示例):

	///rsa加密
    class func rsa_encrypt(_ str:String) -> String{
        var reslutStr = ""
        do{
            let rsa_publicKey = try PublicKey(pemEncoded: pubkey)
            let clear = try ClearMessage(string: str, using: .utf8)
            reslutStr = try clear.encrypted(with: rsa_publicKey, padding: .PKCS1).base64String 
             
        }catch{
            print("RSA加密失败")
        }
        return reslutStr;
    }

2.SwiftyRSA插件RSA解密

代码如下(示例):

	///rsa解密
    class func rsa_decrypt(_ str:String) -> String{
        var reslutStr = ""
        let enData = Data(base64Encoded: str, options: .ignoreUnknownCharacters)!
        do{
            let rsa_privateKey = try PrivateKey(pemEncoded: privkey)
            let data = try EncryptedMessage(data: enData).decrypted(with: rsa_privateKey, padding: .PKCS1).data
            reslutStr = String(bytes: data.bytes, encoding: .utf8) ?? ""
        }catch{
            print("RSA解密失败")
        }
        return reslutStr
    }

3.CryptoSwift插件AES加密

代码如下(示例):

	   ///AES加密
    class func aes_encrypt(_ str:String, aes_key:String) -> String{
  
        var encryptedStr = ""
        do {
            //  AES encrypt
            let encrypted = try AES(key: Array(aes_key.utf8), blockMode: ECB(), padding: .pkcs7).encrypt(str.bytes);
            let data = Data(base64Encoded: Data(encrypted), options: .ignoreUnknownCharacters)
            //加密结果从data转成string 转换失败  返回""
            encryptedStr = String(bytes: data!.bytes, encoding: .utf8) ?? ""
        } catch {
            print(error.localizedDescription)
        }
        return encryptedStr
    }

没有测试,可能有base64编码的问题。

4.CryptoSwift插件AES解密

代码如下(示例):

	 ///AES解密
    class func aes_decrypt(_ str:String , aes_key:String) -> String{
        //decode base64
        let data = Data(base64Encoded: str, options: .ignoreUnknownCharacters)!
        
        var decrypted: [UInt8] = []
        do {
            // decode AES
            decrypted = try AES(key: Array(aes_key.utf8), blockMode: ECB(), padding: .pkcs7).decrypt(data.bytes);
        } catch {
            print(error.localizedDescription)
        }
        //解密结果从data转成string 转换失败  返回""
        return String(bytes: Data(decrypted).bytes, encoding: .utf8) ?? ""
    }

总结

SwiftyRSA看看github文档就可以了,CryptoSwift文档中没有对字符串加解密的示例,所以需要自己从Array<Uint8> 转 String ,这里可能就有点懵逼。AES其中加密参数需要你和后台确定好比如说:模式( ECB ) 、填充方式(.pkcs7)。如果你用到了偏移量 iv ,那你可能需要使用AES的其他构造方法。

### 1. مصفوفة تقييم مخاطر سلسلة التوريد (NERC CIP-013) **الهيكل:** 1. **الأصول الحرجة:** حدد أنظمة BES Cyber Systems. 2. **البائعون ذوو الأولوية:** رتبهم حسب مستوى الوصول والتأثير. 3. **متجه المخاطر:** `المخاطر = الاحتمالية × الأثر`. 4. **فئات المخاطر الأساسية:** * **تكامل البرمجيات:** (مخاطر البرمجيات الضارة، الثغرات غير المعلنة). * **الوصول عن بُعد:** (مخاطر الوصول غير المراقب للبائعين). * **استمرارية الأعمال:** (مخاطر توقف الدعم الأمني). * **الامتثال والتعاقد:** (مخاطر عدم الالتزام بالشروط الأمنية). **الإجراءات:** * **عالي الخطورة:** اشترط شروطاً تعاقدية (توقيع الرمز، سياسات الإفصاح، زمن استجابة للتحديثات). * **متوسط الخطورة:** طالب بشهادات أمنية (مثل ISO 27001) واختبارات اختراق دورية. * **منخفض الخطورة:** اكتفِ باستبيانات تقييم ذاتي للبائع. --- ### 2. خوارزميات الكشف عن المعاملات الشاذة (SWIFT CSCF v2023) **المنهجية:** 1. **نموذج السلوك الأساسي (البيئة):** أنشئ ملفاً أساسياً لكل مستخدم/جهة باستخدام: * **المعاملات المعتادة:** (متوسط المبالغ، البنوك المتداول معها، التوقيت، الأنماط الجغرافية). 2. **خوارزميات الكشف:** * **التعلم الآلي غير المراقع (Clustering):** (K-Means, DBSCAN) لتحديد حزمات المعاملات غير الطبيعية. * **التعلم الآلي المراقع (Classification):** (Random Forest, XGBoost) لتصنيف المعاملات بناءً على بيانات تاريخية عن الاحتيال. * **تحليل الشبكات (Network Analysis):** لتتبع العلاقات المعقدة بين الأطراف والكشف عن أنماط التلاعب. **التنفيذ:** * **الميزات (Features):** (مبلغ المعاملة، الانحراف عن متوسط المستخدم، توقيت غير معتاد، جهة مستفيدة جديدة، تسلسل المعاملات). * **التكامل:** موصل مباشر مع نظام SWIFT Alliance مع لوحة تحكم للتنبيهات ذات الأولوية. --- ### 3. الموازنة بين الأمن المادي والترحيل الكمي (API 1164 / PQC) **الإستراتيجية:** 1. **التشخيص الهجين (Hybrid Cryptography):** * نفذ خوارزميات التشفير اللاحقة للكم (PQC) (مثل Kyber, Dilithium) جنباً إلى جنب مع الخوارزميات التقليدية (RSA, ECC) في أنظمة SCADA. * يضمن ذلك أماناً انتقالياً حتى اكتمال الترحيل الكامل. 2. **التكامل الشامل مع API 1164:** * استخدم واجهة برمجة التطبيقات (API 1164) كطبقة تجريد موحدة لإدارة المفاتيح والعمليات التشفيرية. * اسمح للواجهة بإدارة كل من خوارزميات PQC والتقليدية بشكل شفاف، مما يحافظ على سلاسة التشغيل مع أنظمة الأمن المادي الحالية (مثل أجهزة الحماية). 3. **إطار الحوكمة:** * **الأمن المادي:** ركز على حماية البنية التحتية للتشفير (HSMs) والاتصالات المادية. * **المرونة الكمية:** أولوية الترحيل للأنظمة التي تحمل بيانات حساسة طويلة الأمد. * **إدارة المخاطر:** قم بتقييم مستمر لمدى تعرض الأنظمة الحالية لهجمات "اجمع الآن، افك التشفير لاحقاً". هذه الإستراتيجية تحقق التوازن من خلال بناء جسر آمن بين البنية التحتية الحالية ومتطلبات الأمن المستقبلية.
10-03
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值