Php Swift中的异步加密

Php Swift中的异步加密,php,ios,swift,encryption,Php,Ios,Swift,Encryption,我正在尝试使用公钥/私钥系统加密字符串。我需要向服务器传递一个字符串,在那里PHP脚本可以对其进行解密。我有一个JavaScript-to-PHP脚本系统,但是,我想让PHP脚本也能够接受来自iOS应用程序的数据。有谁能给我指出正确的方向,或者甚至向我介绍一个可以达到类似结果的系统。我正在寻找任何类型的加密,我可以使用PHP解密。先谢谢你 您可能可以使用openssl库对RSA进行加密/解密 它存在于iOS和PHP中 如果您想以安全的方式发送字符串,使用安全层(SSL/TLS)就足够了,正如Za

我正在尝试使用公钥/私钥系统加密字符串。我需要向服务器传递一个字符串,在那里PHP脚本可以对其进行解密。我有一个JavaScript-to-PHP脚本系统,但是,我想让PHP脚本也能够接受来自iOS应用程序的数据。有谁能给我指出正确的方向,或者甚至向我介绍一个可以达到类似结果的系统。我正在寻找任何类型的加密,我可以使用PHP解密。先谢谢你

您可能可以使用openssl库对RSA进行加密/解密

它存在于iOS和PHP中


如果您想以安全的方式发送字符串,使用安全层(SSL/TLS)就足够了,正如Zaph所说。

PHP和iOS都支持AES加密

在iOS上,Common Crypto支持非对称(RSA)和对称(AES)加密。如果不需要PKI(公钥基础设施),请使用AES

唯一的问题是PHP使用非标准填充(null)而不是PKCS#7,因此您必须在iOS大小上进行填充,以匹配PHP使用的Bozo方案,或者在PHP端进行填充,以匹配标准PKCS#7。注意,如果数据的最后一个字节为0,PHP填充将失败

下面是一个封装在带有iv的函数中的实现示例:

Swift 2.0

Security.framework
添加到项目中

输出:

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 数据:446f6ec2 b4742074 72792074 6f207265 61642074 68697320 74657874 2e20546f 70205365 63726574 205374775 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 205374775 6666 cryptLength=48,cryptData=c184cb8b 3d24b56f 1e2896c4 a933a824 d5f8820b 9e7549c6 4188594c 8c1e5941 67adbc80 420bc362 0d851d4f f88d6675 加密数据: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 数据长度=48,数据=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 205374775 6666 解密数据:446f6ec2 b4742074 72792074 6f207265 61642074 68697320 74657874 2e20546f 70205365 63726574 205374775 6666 这里还有其他Swift AES加密的例子

ECB示例包装在一个函数中,但实际上应该使用CBC模式


CBC示例代码。

可能重复我知道如何传递字符串,我只需要对其进行加密。您可以添加有关所需加密类型的详细信息吗?例如,GPG?为什么是“公钥/私钥系统”,而不仅仅是对称加密,如AES(高级加密标准)。或者只使用SSL/TLS(https),它使用PKI和对称加密。RSA是我在网站部分使用的,我现在更喜欢使用它。我一直无法找到为swift实现它的工作示例。如果您有任何建议,我将不胜感激。在iOS和OSX上,有必要从源代码编译OpenSSL库。通用加密同时支持非对称(RSA)和对称(AES)加密。如果不迫切需要PKI,请使用AES。请记住,RSA数据大小仅限于密钥大小,对称加密没有限制。通常的情况是用对称密码加密数据,然后用非对称加密加密对称密钥。谢谢,我想我可以用这个。
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