如何在iOS Objective-C应用程序和Ruby on Rails之间编码加密数据?

Chr*_*art 3 ruby encryption aes objective-c ios

我正在开发iOS和Ruby on Rails应用程序,需要将从iOS应用程序加密的数据传输到Ruby on Rails应用程序.我的挑战是如何以我可以在Rails端解码的方式对Objective-C中的数据进行编码.我在这个SO问题中使用示例作为加密数据的方法,示例代码显示了加密数据的样子:

printf("%s\n", [[plain description] UTF8String]);
Run Code Online (Sandbox Code Playgroud)

它创建的输出看起来像:

<3fe47b63 bd9a84ab 30dfb1a4 e409b60f>

我的挑战是我需要找到一种方法来通过线路连接到Rails应用程序,我可以解码以便与OpenSSL代码一起使用,例如:

def decrypt(data)
  cipher = OpenSSL::Cipher::Cipher.new('aes-256-cbc')
  cipher.decrypt
  cipher.key = cipher_key
  cipher.iv = cipher_iv
  decrypted_data = cipher.update(data)
  decrypted_data << cipher.final
end
Run Code Online (Sandbox Code Playgroud)

我认为Base64编码可能是最好的方法,因为这些数据最终会出现在JSON请求的HTTP头中.似乎我可以使用Base64.decode64来解码Ruby端的数据并将其作为要解密的数据传递,但是我希望有人可以指导我这是否真的是最好的方法,而且无论如何编码,如何将指针转换为NSData对象,如下所示:

NSData *cipher = [plain AES256EncryptWithKey:key];
Run Code Online (Sandbox Code Playgroud)

进入该编码值,以获得它到Rails应用程序.谢谢!

Gur*_*ngh 12

您可以使用标准AES加密.以下是具有AES-256-CBC密码和Base64编码的库,您可以在两个平台上快速使用:

红宝石

https://github.com/Gurpartap/aescrypt

以下是使用AESCrypt Ruby gem的方法:

message = "top secret message"
password = "p4ssw0rd"

# Encrypting
encrypted_data = AESCrypt.encrypt(message, password)

# Decrypting
message = AESCrypt.decrypt(encrypted_data, password)
Run Code Online (Sandbox Code Playgroud)

Objective-C的

https://github.com/Gurpartap/AESCrypt-ObjC

以下是使用AESCrypt Objective-C类的方法:

NSString *message = @"top secret message";
NSString *password = @"p4ssw0rd";

// Encrypting
NSString *encryptedData = [AESCrypt encrypt:message password:password];

// Decrypting
NSString *message = [AESCrypt decrypt:encryptedData password:password];
Run Code Online (Sandbox Code Playgroud)

祝好运!