通过阅读我附带的要点:https://gist.github.com/KazW/e77e5c7603d7700d86c1
,可以最容易地理解这个问题我在Ruby中有一个简单的加密/解密函数。每次运行加密函数时,都会使用<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta name="description" content="Playing with ReactJS">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Playing with ReactJS</title>
</head>
<body>
<!-- container node -->
<div id="app"></div>
<script src="bower_components/react/react.js"></script>
<script src="bower_components/react/react-dom.js"></script>
<script type="text/jsx">
/** @jsx React.DOM */
var MessageBox = React.createClass({
render: function() {
return (
<h1>Hello, World</h1>
);
}
});
ReactDOM.render(
<MessageBox/>,
document.getElementById('app'),
function () {
console.log('after render');
}
);
</script>
</body>
</html>
创建一个新的初始化向量。当我尝试使用OpenSSL::Random.random_bytes(12)
在Elixir中执行相同的步骤时,它会生成一个可用于加密的IV,但会导致解密失败。
奇怪的是,如果我使用Ruby中生成的IV,并将其用于Elixir中的加密。当传递密文以在Elixir中解密时,解密函数返回明文而没有错误。我已经研究过使用的算法,IV应该是随机字节,重要因素是它中的字节数(12)。
我最初的想法是,我可能正在调用错误的OpenSSL方法来生成IV。但是,我无法找到有关正确方法的信息。
答案 0 :(得分:6)
这里的问题是您使用String函数来读取数据,这些数据仅适用于Unicode,UTF8字符是可变宽度的。您应该使用模式匹配,它使用单字节宽度。