2014-03-19 45 views
0

这是我如何加密字符串:iOS的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, “链接”: “”, “类型”: “文本”, “thumbnailBlobID”: “”, “花束”:103.6809424405021, “文本”:” AA”, “类名”: “信息”, “originalBlobID”: “”, “日期时间”: “20140319214528457”, “selfDestructive”:0, “用户ID”: “949157”, “POSX”:1.347154229880634, “状态”: “normal”,“entityID”:“20140319214528457and949157and {\”array \“:[\”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

回答

1

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

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

+0

是否可以设置标准配置?这很重要,因为我需要解密这是从JavaScript端加密的字符串 – OMGPOP

+0

你需要选择一个可在多个平台上运行的工具。 RNCryptor做到这一点。它包括iOS和JS实现(JS还是有点新的,并且可以在生产中使用过慢;仍在调查这一点)。 https://github.com/RNCryptor/ –

0

是否有可能转义字符(反斜杠)正在通过网络解释是不同的代码与?这里的底线是我(代码)进行解码你刚才编码,你应该拿出一样的,你放什么,这可能是要进行测试。希望这可以帮助。另请参阅@RobNapier下面的注释