Я пытаюсь зашифровать строку, используя систему Public/Private Key. Мне нужно передать строку на сервер, где скрипт PHP может расшифровать его. У меня есть работающая скриптовая система JavaScript для PHP, однако я бы хотел, чтобы PHP-скрипт также принимал данные из приложения iOS. Может ли кто-нибудь указать мне в правильном направлении или, возможно, даже познакомить меня с системой, которая могла бы достичь аналогичного результата. Я ищу любой тип шифрования, который я мог бы использовать для расшифровки с помощью PHP. Заранее спасибо.Асинхронное шифрование в Swift
ответ
PHP и iOS поддерживают шифрование AES.
В iOS Common Crypto поддерживается как асимметричное (RSA), так и симметричное (AES) шифрование. Если нет необходимости в , то для PKI (инфраструктура открытого ключа) использовать AES можно.
Единственная проблема заключается в том, что PHP использует нестандартное дополнение (NULL) вместо PKCS # 7, поэтому вам придется делать свое собственное дополнение либо по размеру iOS, чтобы соответствовать схеме Bozo, используемой PHP, либо на стороне PHP, чтобы соответствуют стандарту PKCS # 7. Обратите внимание, что PHP заполнение не выполняется, если последние байты данных равны 0.
Вот пример реализации, завернутый в функции с IV:
Swift 2,0
Добавить
Security.framework
в проект ,
#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;
}
// Код проверки:
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)")
}
}
Выход:
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
Есть и другие примеры Swift AES шифрования здесь на SO.
Пример ECB SO answer, завернутый в функцию, но вы действительно должны использовать режим CBC.
CBC пример SO answer код.
Спасибо, я думаю, что смогу с этим справиться. – Alex
Возможно, вы можете использовать библиотеку openssl для шифрования/расшифровки RSA.
Он выходит как в iOS, так и в PHP.
Если вы хотите отправить свои строки безопасным образом, использование уровня безопасности (SSL/TLS) достаточно, как говорит Zaph.
RSA - это то, что я использую на веб-сайте, и я бы предпочел использовать это на данный момент. Я не смог найти рабочие примеры, которые реализуют его для быстрого. Если у вас есть предложения, я буду благодарен им. – Alex
На iOS и OSX необходимо собрать библиотеку OpenSSL из источника. Common Crypto поддерживает как асимметричное (RSA), так и симметричное (AES) шифрование. Если нет необходимости в использовании PKI AES.Имейте в виду, что размер данных RSA ограничен размером ключа, нет ограничения на симметричное шифрование. Обычный случай заключается в том, чтобы зашифровать данные симметричным шифром, а затем зашифровать симметричный ключ с помощью асимметричного шифрования. – zaph
- 1. Nodejs. Асинхронное шифрование и дешифрование
- 2. Swift iOS8 асинхронное изображение
- 3. Создать асинхронное действие в Swift
- 4. Асинхронное сообщение Swift и Javascriptcore
- 5. Как работает асинхронное закрытие в Swift
- 6. MD5 3DES шифрование Swift
- 7. Шифрование и дешифрование в SWIFT
- 8. XOR Шифрование в Swift IOS
- 9. PBEWithMD5AndDES Шифрование в Swift 3
- 10. iOS - Шифрование паролей в Swift
- 11. Шифрование/Расшифровка UIImage в Swift с использованием AES Шифрование
- 12. Почему асинхронное сетевое тестирование сложно в Objective-C/Swift?
- 13. Swift AES шифрование с использованием CommonCrypto
- 14. RSA-шифрование между Swift и C#
- 15. Асинхронное вычисление в TensorFlow
- 16. Асинхронное замешательство в node.js
- 17. Асинхронное действие в бутылке
- 18. асинхронное программирование в python
- 19. Асинхронное программирование в ADO.Net
- 20. Асинхронное программирование в javascript
- 21. Асинхронное программирование в JAVA
- 22. Асинхронное согласование в петле
- 23. асинхронное программирование
- 24. Асинхронное подключение
- 25. Асинхронное гнездо
- 26. Шифрование Шифрование в angularjs 1
- 27. SWIFT - шифрование db в реальном времени не работает
- 28. Как сделать шифрование содержимого основных данных в swift
- 29. Асинхронное получение данных в AngularJS
- 30. Асинхронное чтение файлов в js
Возможный дубликат [HTTP-запрос в Swift с методом POST] (http://stackoverflow.com/questions/26364914/http-request-in-swift-with-post-method) –
Я знаю, как передать строку , Мне просто нужно зашифровать его. – Alex
Можете ли вы добавить сведения о том, какое шифрование вы хотите? Например, GPG? – joelparkerhenderson