首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用CryptoSwift和Ruby填充错误

用CryptoSwift和Ruby填充错误
EN

Stack Overflow用户
提问于 2015-10-09 18:01:38
回答 1查看 1.5K关注 0票数 2

我很难让CryptoSwiftRuby's OpenSSL AES玩得很好

我的Swift代码:

代码语言:javascript
复制
let key = ("12345678901234567890123456789012" as NSString).dataUsingEncoding(NSUTF8StringEncoding)?.arrayOfBytes() //32 chars because im testing AES 256
let iv = Cipher.randomIV(AES.blockSize)
let data = NSData(bytes: iv, length: Int(iv.count))
let ivstring = data.base64EncodedStringWithOptions(NSDataBase64EncodingOptions(rawValue: 0));
print(ivstring)

let message = "Hello World".dataUsingEncoding(NSUTF8StringEncoding)?.arrayOfBytes()

    do
    {

        let encrypted = try AES(key: key!, iv: iv, blockMode: .CBC)?.encrypt(message!, padding: PKCS7())
        let decrypted = try AES(key: key!, iv: iv, blockMode: .CBC)?.decrypt(encrypted!, padding: PKCS7())

        let encData = NSData(bytes: encrypted!, length: Int(encrypted!.count))
        let base64String: String = encData.base64EncodedStringWithOptions(NSDataBase64EncodingOptions(rawValue: 0));
        let result = String(base64String)
        print(result)

        let decData = NSData(bytes: decrypted!, length: Int(decrypted!.count))
        let result2 = NSString(data: decData, encoding: NSUTF8StringEncoding)
        print(result2!)

    }
    catch
    {

    }

其中产出:

代码语言:javascript
复制
7oR9lu+ROC7PW7bDqXcRxw==
XzZj2OTTbA8zaedeoVh0KA==
Hello World

然后,在Ruby中,我需要:

代码语言:javascript
复制
key = "12345678901234567890123456789012"
iv = "7oR9lu+ROC7PW7bDqXcRxw=="

encrypted = "XzZj2OTTbA8zaedeoVh0KA=="

decipher = OpenSSL::Cipher::AES.new(256, :CBC)
decipher.decrypt
decipher.key = key
decipher.iv = iv
plain = decipher.update(encrypted) + decipher.final

红宝石代码在最后一行plain = decipher.update(encrypted) + decipher.final上抛出一个错误,声明:

代码语言:javascript
复制
OpenSSL::Cipher::CipherError
=================================================
> wrong final block length

我显然不是最有经验的加密人员,但你能给我的任何帮助都会非常感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-09 21:21:31

在解密之前,您需要对数据和iv进行64位解码。您目前正在通过AES直接发送64基编码数据。

解密后别忘了剥去垫子。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33044533

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档