Kaz*_*ker 4 ruby encryption openssl cryptography elixir
通过阅读我附带的要点,最容易理解这个问题:https://gist.github.com/KazW/e77e5c7603d7700d86c1
我在Ruby中有一个简单的加密/解密函数.每次运行加密函数时,都会使用创建新的初始化向量OpenSSL::Random.random_bytes(12).当我尝试在Elixir中使用相同的步骤时:crypto.strong_rand_bytes(12),它会生成一个可用于加密的IV,但会导致解密失败.
更奇怪的是,如果我使用在Ruby中生成的IV,并将其用于Elixir中的加密.当传递密文以在Elixir中解密时,解密函数返回明文而没有错误.我研究了使用中的算法,IV应该是随机字节,重要的因素是它中的字节数(12).
我最初的想法是,也许我正在调用错误的OpenSSL方法来生成IV.但是,我无法找到任何关于正确方法的信息.
这里的问题是您使用String函数来读取数据,这些数据仅适用于Unicode,UTF8字符是可变宽度的.您应该使用模式匹配,它使用单字节宽度.
https://gist.github.com/asonge/4f035a38a9b31339d8f5