iOS AES加密错误结果

时间:2014-03-19 13:49:28

标签: ios encryption cryptography aes

以下是我加密字符串的方法:

+ (NSString *)encrypt:(NSString *)message password:(NSString *)password {
    NSData *encryptedData = [[message dataUsingEncoding:NSUTF8StringEncoding] AES256EncryptedDataUsingKey:[password dataUsingEncoding:NSUTF8StringEncoding] error:nil];
  NSString *base64EncodedString = [NSString base64StringFromData:encryptedData length:[encryptedData length]];
  return base64EncodedString;
}

明文是:

{" roomID":" {\"阵列\":[\" 949156 \" \" 949157 \ "]}""持续时间":15,"连结":"""类型":& #34;文本"" thumbnailBlobID":""" POSY":103.6809424405021,"文本":" AA""的className":"消息"" originalBlobID":"""日期时间&#34 ;: " 20140319214528457"" selfDestructive":0,"用户ID":" 949157"" POSX":1.347154229880634,& #34;状态":"正常"" ENTITYID":" 20140319214528457and949157and {\"阵列\":[\" 949156 \" \" 949157 \"]}"}

这就是我得到的

gXqxfDhImRD7S20lUdYuCPAlXfqRnG6xk4w4K5Op / WnYMh6VgJUUqMifK2vHkUpAbnZ + wKdSWjfzU1PuOwvJ4dJ9EiHwjeyyorezFNG6eylYcOvMWNeU6 + 5Z9XxfcFngqhmxM6k1lf7bkttTu0FnEHad / czFgiMVTy60DJpFMLSODkKEVezqQB9s / f3Qy / B6 + sF5Hs5E0FDn7kU6Jtm6mLkFjGzDCXTdFXNjdussbkTL8C1gcOnn4hrNkqQKb82MgqqYf8sVgs4FVIjsmoJd0ALY8y / 5QbBkgc6ZyB4aOQPPx / u4HS3F7HXHkIkkAjZS / hiHQBRyfwCvi2uwFedno5twYogNW56pSMQqBeJBxBAhPMpXzb51853GLP4bCotGtOyEfU96x5kWHDOR5QA2WhYZkB3AALDJ2kfqzWR8iOKHo3zE6DCQ7aH0RwEFlNPi8vsNwvUqtQ7nUODA5lUMYah6W2rfDh / em8BD8dGF5J6IUTIlSerx8wWPA9bn / SXO

来自网站http://aesencryption.net(256位) (我认为这是正确的答案

5MdV0TelF ++ / 8Cy9bnkeah0nQ5JbC04CEdCcHfdlavQtZaxg3ZSXklp9yXbeP05hcIeQDgFcMr9NlD6aKhjBL3Xh70ksYqc6Xv5BZvCbXrvO4ufAf4gjmDRQr9DYSbjFct6N82fFGDtrcuFm36Zv + QAQtR / scT86A ++ VN / EBlPwFb7ZmxlMPkJWjQ98ObreXHeKkZ8f2npMKfJ0i36nIZ8CZeL0EYeg / njo9ykPTfm9wfKieqlIICn1qNZAXE // P9hTleW / GNs5 + ET2gxNSCmdO + ByUB9Q3sZ / + + 57qXbsfCxHr8dsuBrsbRI cVIXyquQL1IC / zuz3G3fcyoiLrD / PnFtV5z5XR0hpUiU8JjovjYwyXaBfyTBnO71zxmdoZdsyPwA1LQO0pedn8UsICT2KbfBKwuumW2CJPexbnMmVzpIJ / VPISikdg18V3rdJqiPMIb4Zq2PGKO0Wtq1dCTMusTv / ZnqxgVQFQlUivgBqtnOLCDaMAGL636NXda95V2

2 个答案:

答案 0 :(得分:1)

没有单一的标准方法可以为输出应用AES或标准数据格式。当用于不完全16字节长的数据时,AES需要许多帮助程序,并且可以以不同方式配置它们。我不知道aesencryption.net工具如何应用这些助手;它没有说。如果AES256EncryptedDataUsingKey:是我认为的特定代码段,则它应用得非常差(它与我在Properly Encrypting With AES With CommonCrypto中讨论的代码非常相似)。如果aesencryption.net做了不同的事情,我不会感到惊讶。

如果您有一段明文和一个密钥,并且将其传递给加密器两次并获得相同的答案,那么您的加密器就会损坏。正确的AES加密器(几乎任何常见的AES使用)应始终为相同的明文+密钥返回不同的结果(否则攻击者可以确定两个明文相等,这打破了AES的安全性证据)。在最常见的情况下,这是通过具有唯一的初始化向量(IV)来实现的。对于基于密码的AES,还包括随机盐。因此,即使这些是AES的良好实现,您也不会期望您的结果匹配。

答案 1 :(得分:0)

是否有可能在代码中通过网络对转义字符(反斜杠)进行不同的解释?这里的底线是我(在代码中)解码你刚刚编码的内容,你应该与你输入的相同。这可能是你想要进行的测试。希望这可以帮助。另见@RobNapier的评论