我知道PHP的mcrypt_decrypt上已经有一百万个帖子,但我找不到一个与我的结果相同的帖子。我有一对简单的加密/解密函数,我想用它来对数据执行双向加密。奇怪的是,对于我输入到函数中的任何随机字符串的大约4%,它不会成功解密。例如,如果我创建一个从0到9999的“for循环”,并加密和解密这些数字的字符串版本,则每次相同的值都会失败,这些值取决于我传递给函数的密钥。我可以传递任何键,尽管失败的特定值会更改,但失败的值的百分比将大致保持不变。
我试过不带IV参数的ECB模式,也试过带IV参数的CBC模式,结果都一样。
以下是我在ECB模式下的加密函数:
function mc_encrypt($string, $mc_key) {
$passcrypt = trim(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $mc_key, trim($string), MCRYPT_MODE_ECB));
$encode = base64_encode($passcrypt);
return $encode;
}
这是我在ECB模式下的解密功能:
function mc_decrypt($string, $mc_key) {
$decoded = base64_decode($string);
$decrypted = trim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $mc_key, trim($decoded), MCRYPT_MODE_ECB));
return $decrypted;
}
CBC模式版本是相同的,只是它使用mcrypt_create_iv()函数在加密中创建IV,并将其作为解密中的参数传入。
在我的服务器上使用这些函数并带有“abc”作为测试加密密钥,如果我从0运行到300,则以下值将无法正确解密:
4, 6, 70, 145, 151, 176, 237, 254, 275
如果我将加密密钥更改为其他内容,它将正确地改变返回的值,但不会改变返回值的频率。
有什么建议吗???
提前感谢!
我只是从您的代码中取出了两个< code>trim()调用,它就工作了。基本上,< code>mcrypt_encrypt可能会返回一个带有尾随空字节(\0)的答案,需要保留这些。同样,出于同样的原因,不要将$decoded参数调整为< code>mcrypt_decrypt。当调整来自< code>mcrypt_decrypt的响应时,只使用< code>rtrim。
function mc_encrypt($string, $mc_key) {
$passcrypt = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $mc_key, trim($string), MCRYPT_MODE_ECB);
$encode = base64_encode($passcrypt);
return $encode;
}
function mc_decrypt($string, $mc_key) {
$decoded = base64_decode($string);
$decrypted = rtrim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $mc_key, $decoded, MCRYPT_MODE_ECB));
return $decrypted;
}
我正在尝试用python中的pycrypto加密/解密。在大多数情况下,事情进展顺利,但在解密数据时,我遇到了一个奇怪的问题。我尝试对一些JPG进行加密/解密以进行测试,尽管它们加密/解密没有问题,但解密的文件无法打开/已损坏。为了找到问题,我保存了一个文本文件,其中有一个类似于“测试这个文件的完整性”之类的随机句子,它只有在“…完整性”之类的内容之后才能正确解密,完整性之前的所有内容仍然是乱码。
我对JPareSposition进行了本机查询,如: 生成的查询如下所示: 几何图形是表中包含空间数据的列。 但跟踪还表明查询存在解析错误: 但当我在数据库中执行查询时,我得到的结果是正确的。 为什么这个不匹配? 我最终可以通过以下方式解决这个问题:
我正在编辑从tesseract ocr收到的一些电子邮件。 以下是我的代码: 但输出不正确。 输入: 输出: 但是当我在每次替换后将结果赋给一个新的字符串时,它工作得很好。为什么在同一个字符串中连续赋值不起作用?
我在一个网站上工作,遇到了一个问题,点击我的“删除”链接会出现一个错误页面。在localhost上运行良好-无法理解为什么在Heroku站点上会有所不同。 有人知道这是怎么回事吗? 我的“图片”控制器: 我的图片/新视图: 以下是我尝试删除图片时的heroku日志(从导航到新图片页面开始(同一视图中的新建和编辑功能): 2015-11-15T16:13:49.189857 00:00 heroku
问题内容: 我有一个这样的字符串:现在我想用实际的换行符替换\ n,这样它将变成 理发师 这是我的代码 但是它不起作用并且给我相同的字符串 问题答案: 您需要做: 该方法在其第一个参数中期望使用正则表达式。当在Java字符串中传递2时,您实际上传递了1。问题是,是一种逃避字符也正则表达式,因此正则表达式是actualy ,所以你需要把额外的两次。
本文向大家介绍使用 node.js 模仿 Apache 小部分功能,包括了使用 node.js 模仿 Apache 小部分功能的使用技巧和注意事项,需要的朋友参考一下 首先,这个例子用到了服务端渲染的技术。服务端渲染,说白了就是在服务端使用模板引擎,这里我先简单的介绍一下服务端渲染与客户端渲染之间的区别。 服务端渲染与客户端渲染之间的区别: 客户端渲染不利于搜索引擎优化 服务端渲染可以被爬虫抓取到