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