久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

Swift 中的異步加密

Asynchronous encryption in Swift(Swift 中的異步加密)
本文介紹了Swift 中的異步加密的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!

問題描述

我正在嘗試使用公鑰/私鑰系統加密字符串.我需要將一個字符串傳遞給服務器,PHP 腳本可以在其中解密它.我有一個可運行的 JavaScript 到 PHP 腳本系統,但是,我想讓 PHP 腳本也可以接受來自 iOS 應用程序的數據.任何人都可以指出我正確的方向,或者甚至可以向我介紹一個可以實現類似結果的系統.我正在尋找可用于用 PHP 解密的任何類型的加密.先感謝您.

解決方案

PHP 和 iOS 都支持 AES 加密.

在 iOS 上,Common Crypto 支持非對稱 (RSA) 和對稱 (AES) 加密.如果沒有對 PKI(公鑰基礎設施)的強制性需求,請使用 AES.

唯一的問題是 PHP 使用非標準填充 (null) 而不是 PKCS#7,因此您必須在 iOS 大小上進行自己的填充以匹配 PHP 使用的 Bozo 方案或在 PHP 端進行匹配標準的 PKCS#7.請注意,如果數據的最后一個字節為 0,則 PHP 填充失敗.

這是一個封裝在帶有 iv 的函數中的實現示例:

斯威夫特 2.0

<塊引用>

Security.framework 添加到項目中.

#import NSData?{讓 keyBytes = UnsafePointer(keyData.bytes)print("keyLength = (keyData.length), keyData = (keyData)")讓 ivBytes = UnsafePointer(ivData.bytes)打印(ivLength = (ivData.length),ivData = (ivData)")讓 dataLength = Int(data.length)讓 dataBytes = UnsafePointer(data.bytes)print("dataLength = (dataLength), data = (data)")讓 cryptData:NSMutableData!= NSMutableData(length: Int(dataLength) + kCCBlockSizeAES128)讓 cryptPointer = UnsafeMutablePointer(cryptData.mutableBytes)讓 cryptLength = size_t(cryptData.length)讓 keyLength = size_t(kCCKeySizeAES128)讓算法:CCAlgorithm = UInt32(kCCAlgorithmAES128)讓選項:CCOptions = UInt32(kCCOptionPKCS7Padding)var numBytesEncrypted:size_t = 0讓 cryptStatus = CCCrypt(操作,算法,選項,密鑰字節,密鑰長度,ivBytes,數據字節,數據長度,cryptPointer, cryptLength,&numBytesEncrypted)如果 UInt32(cryptStatus) == UInt32(kCCSuccess) {cryptData.length = Int(numBytesEncrypted)打印(cryptLength = (numBytesEncrypted),cryptData = (cryptData)")} 別的 {打印(錯誤:(cryptStatus)")}返回 cryptData;}

//測試代碼:

let keyString = "!使用數據鍵!"讓 keyData = (keyString as NSString).dataUsingEncoding(NSUTF8StringEncoding) 作為 NSData!let ivString = "使用隨機 iv!"讓 ivData = (keyString as NSString).dataUsingEncoding(NSUTF8StringEncoding) 作為 NSData!let message = "不要試圖閱讀這篇文章.絕密的東西"讓 data = (message as NSString).dataUsingEncoding(NSUTF8StringEncoding) as NSData!打印(數據:(數據)")if let encryptedData = testCrypt(data, keyData:keyData, ivData:ivData, operation:UInt32(kCCEncrypt)) {打印(加密數據:(加密數據)")如果讓解密數據 = testCrypt(encryptedData, keyData:keyData, ivData:ivData, operation:UInt32(kCCDecrypt)) {打印(解密數據:(解密數據)")}}

輸出:

<前>數據:446f6ec2 b4742074 72792074 6f207265 61642074 68697320 74657874 2e20546f 70205365 63726574 2056664 7keyLength = 16,keyData = 21557365 20612064 61746120 6b657921ivLength = 16, ivData = 21557365 20612064 61746120 6b657921數據長度 = 46,數據 = 446f6ec2 b4742074 72792074 6f207265 61642074 68697320 74657874 2e20546f 70205365 637205637646cryptLength = 48, cryptData = c184cb8b 3d24b56f 1e2896c4 a933a824 d5f8820b 9e7549c6 4188594c 8c1e5941 67adbc80 4206df8586加密數據:c184cb8b 3d24b56f 1e2896c4 a933a824 d5f8820b 9e7549c6 4188594c 8c1e5941 67adbc80 420bc362 0d8856d4keyLength = 16,keyData = 21557365 20612064 61746120 6b657921ivLength = 16, ivData = 21557365 20612064 61746120 6b657921數據長度 = 48,數據 = c184cb8b 3d24b56f 1e2896c4 a933a824 d5f8820b 9e7549c6 4188594c 8c1e5941 67adbc80 420bc858d6f60cryptLength = 46, cryptData = 446f6ec2 b4742074 72792074 6f207265 61642074 68697320 74657874 2e20546f 70205365 646726563解密數據:446f6ec2 b4742074 72792074 6f207265 61642074 68697320 74657874 2e20546f 70205365 63726574 2566574

SO 上還有其他 Swift AES 加密示例.

ECB 示例 SO 答案 包裹在函數中,但您應該真正使用 CBC 模式.

CBC 示例 SO 答案代碼.

I am trying to encrypt a string, using Public/Private Key system. I need to pass a string to the server, where a PHP script can decrypt it. I have a working JavaScript to PHP script system, however, I'd like to make it possible for the PHP script to also accept data from the iOS app. Can anyone point me in the right direction, or perhaps even introduce me to a system which could achieve a similar result. I am looking for any type of encryption that I could use to decrypt with PHP. Thank you in advance.

解決方案

PHP and iOS both support AES encryption.

On iOS Common Crypto supports both asymmetric (RSA) and symmetric (AES) encryption. If there is not a compelling need for PKI (Public key infrastructure) use AES.

The only issue is that PHP uses non-standard padding (null) instead of PKCS#7 so you will have to do your own padding either on the iOS size to match the Bozo scheme PHP uses or on the PHP side to match the standard PKCS#7. Note the PHP padding fails if the last byte of the data is 0.

Here is an implementation example wrapped in a function with an iv:

Swift 2.0

Add the Security.framework to the project.

#import <CommonCrypto/CommonCrypto.h

func testCrypt(data:NSData, keyData:NSData, ivData:NSData, operation:CCOperation) -> NSData? {
    let keyBytes = UnsafePointer<UInt8>(keyData.bytes)
    print("keyLength   = (keyData.length), keyData   = (keyData)")

    let ivBytes = UnsafePointer<UInt8>(ivData.bytes)
    print("ivLength    = (ivData.length), ivData    = (ivData)")

    let dataLength = Int(data.length)
    let dataBytes  = UnsafePointer<UInt8>(data.bytes)
    print("dataLength  = (dataLength), data      = (data)")

    let cryptData: NSMutableData! = NSMutableData(length: Int(dataLength) + kCCBlockSizeAES128)
    let cryptPointer = UnsafeMutablePointer<UInt8>(cryptData.mutableBytes)
    let cryptLength  = size_t(cryptData.length)

    let keyLength              = size_t(kCCKeySizeAES128)
    let algoritm:  CCAlgorithm = UInt32(kCCAlgorithmAES128)
    let options:   CCOptions   = UInt32(kCCOptionPKCS7Padding)

    var numBytesEncrypted :size_t = 0

    let cryptStatus = CCCrypt(operation,
        algoritm,
        options,
        keyBytes, keyLength,
        ivBytes,
        dataBytes, dataLength,
        cryptPointer, cryptLength,
        &numBytesEncrypted)

    if UInt32(cryptStatus) == UInt32(kCCSuccess) {
        cryptData.length = Int(numBytesEncrypted)
        print("cryptLength = (numBytesEncrypted), cryptData = (cryptData)")

    } else {
        print("Error: (cryptStatus)")
    }

    return cryptData;
}

// Test code:

let keyString = "!Use a data key!"
let keyData = (keyString as NSString).dataUsingEncoding(NSUTF8StringEncoding) as NSData!

let ivString = "Use a random iv!"
let ivData = (keyString as NSString).dataUsingEncoding(NSUTF8StringEncoding) as NSData!

let message = "Don′t try to read this text. Top Secret Stuff"
let data = (message as NSString).dataUsingEncoding(NSUTF8StringEncoding) as NSData!

print("data: (data)")
if let encryptedData = testCrypt(data, keyData:keyData, ivData:ivData, operation:UInt32(kCCEncrypt)) {
    print("encryptedData: (encryptedData)")
    if let decryptedData = testCrypt(encryptedData, keyData:keyData, ivData:ivData, operation:UInt32(kCCDecrypt)) {
        print("decryptedData: (decryptedData)")
    }
}

Output:

data: 446f6ec2 b4742074 72792074 6f207265 61642074 68697320 74657874 2e20546f 70205365 63726574 20537475 6666
keyLength   = 16, keyData   = 21557365 20612064 61746120 6b657921
ivLength    = 16, ivData    = 21557365 20612064 61746120 6b657921
dataLength  = 46, data      = 446f6ec2 b4742074 72792074 6f207265 61642074 68697320 74657874 2e20546f 70205365 63726574 20537475 6666
cryptLength = 48, cryptData = c184cb8b 3d24b56f 1e2896c4 a933a824 d5f8820b 9e7549c6 4188594c 8c1e5941 67adbc80 420bc362 0d851d4f f88d6675
encryptedData: c184cb8b 3d24b56f 1e2896c4 a933a824 d5f8820b 9e7549c6 4188594c 8c1e5941 67adbc80 420bc362 0d851d4f f88d6675
keyLength   = 16, keyData   = 21557365 20612064 61746120 6b657921
ivLength    = 16, ivData    = 21557365 20612064 61746120 6b657921
dataLength  = 48, data      = c184cb8b 3d24b56f 1e2896c4 a933a824 d5f8820b 9e7549c6 4188594c 8c1e5941 67adbc80 420bc362 0d851d4f f88d6675
cryptLength = 46, cryptData = 446f6ec2 b4742074 72792074 6f207265 61642074 68697320 74657874 2e20546f 70205365 63726574 20537475 6666
decryptedData: 446f6ec2 b4742074 72792074 6f207265 61642074 68697320 74657874 2e20546f 70205365 63726574 20537475 6666

There are other examples of Swift AES encryption here on SO.

ECB example SO answer wrapped in a function, but you should really use CBC mode.

CBC example SO answer code.

這篇關于Swift 中的異步加密的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!

【網站聲明】本站部分內容來源于互聯網,旨在幫助大家更快的解決問題,如果有圖片或者內容侵犯了您的權益,請聯系我們刪除處理,感謝您的支持!

相關文檔推薦

Joining 2 tables in SELECT(MYSQL/PHP)(在 SELECT(MYSQL/PHP) 中加入 2 個表)
How to make lt;option selected=quot;selectedquot;gt; set by MySQL and PHP?(如何使lt;option selected=“selectedgt;由 MySQL 和 PHP 設置?)
Auto populate a select box using an array in PHP(使用 PHP 中的數組自動填充選擇框)
PHP SQL SELECT where like search item with multiple words(PHP SQL SELECT where like search item with multiple words)
json_encode produce JSON_ERROR_UTF8 from MSSQL-SELECT(json_encode 從 MSSQL-SELECT 產生 JSON_ERROR_UTF8)
MySQL ORDER BY rand(), name ASC(MySQL ORDER BY rand(),名稱 ASC)
主站蜘蛛池模板: avmans最新导航地址 | 精品一区国产 | 日韩视频中文字幕 | 天色综合网 | 另类在线| 精品中文字幕一区 | 亚洲 欧美 另类 综合 偷拍 | 午夜不卡福利视频 | 天堂一区| 久久久久国产精品一区二区 | 欧美激情国产精品 | 亚洲精品一区二区三区中文字幕 | 欧美综合一区 | 午夜三级在线观看 | 欧美区在线 | www.99热这里只有精品 | 成人福利在线 | 依人成人 | 国产一区二区三区精品久久久 | 亚洲国产精品激情在线观看 | www国产精品 | 精品美女在线观看视频在线观看 | 国产精品爱久久久久久久 | av在线免费网站 | 日本国产欧美 | 日韩av在线免费 | 亚洲欧美视频 | 日韩亚洲视频在线 | 日韩精品一区二区三区在线播放 | 欧美亚洲成人网 | 日本精品一区二区 | 免费看大片bbbb欧美 | 成人精品一区二区三区中文字幕 | 国产毛片久久久 | 男女网站免费观看 | 草久久免费视频 | 中文字幕在线免费观看 | 久久久天堂 | 97国产精品视频人人做人人爱 | 国产精品国产三级国产aⅴ中文 | 成人精品高清 |