我在使用PHP解密使用iOS 5.x的CommonCrypto库加密的字符串时遇到麻烦.以下是参数:

Algorithm: AES-128

Mode: CTR

Mode options: CTR Little-Endian

Padding: None

这是我最大的尝试示例:

$encrypted = base64_decode('MlNFlnXE1sqIsmKZRtjChBvUMgiJlXgdjHVxQJ6JK24Id4uaN9NK/nBtY+cgrMJR/PRJRCmIUx0boQO5XqJYZ8VJ0w==');

$key = base64_decode('HB+dD1Irj2rXQ/nO+IuqSiK9xVE3PD9cZGIGzrMtwtA=');

$iv = base64_decode('2gxxKYU/G4lj7174e5wj+g==');

$cryptor = mcrypt_module_open('rijndael-128', '', 'ctr', '');

mcrypt_generic_init($cryptor, $key, $iv);

echo mdecrypt_generic($cryptor, $encrypted);

mcrypt_generic_deinit($cryptor);

mcrypt_module_close($cryptor);

输出看起来像这样:

Lorem ipsum dolo?N??]ѕȢ?+?

????x??k????}??'???Ŧ??;t

但这应该是“ Lorem ipsum dolor坐着,奉献自若,sed do …”(包括尾随省略号.)

块大小为16,并且正确获取了前16个字符.这似乎表明Mcrypt和CommonCrypto之间的AES CTR反增量过程不匹配.到目前为止,我听到的每个人都认为这是Big Endian与Little Endian的问题.

我花了几天时间试图自己找出所有这些字节序和反增量的东西,但是对我来说仍然是巫毒教. :-(我只需要一些PHP代码即可正确地解密我的字符串.我不在乎算法的运行速度.我愿意放弃Mcrypt来支持PHP原生解决方案或其他一些PHP扩展,只要这是很常见的做法,但是,不能在iOS端进行更改.

请帮忙!

解决方法:

分组密码模式非常简单,如果两种实现方式不兼容,则可以自己实现.

这是针对您的特定情况的点击率实现:

function ctr_crypt($str, $key, $iv) {

$numOfBlocks = ceil(strlen($str) / 16);

$ctrStr = '';

for ($i = 0; $i < $numOfBlocks; ++$i) {

$ctrStr .= $iv;

// increment IV

for ($j = 0; $j < 16; ++$j) {

$n = ord($iv[$j]);

if (++$n == 0x100) {

// overflow, set this one to 0, increment next

$iv[$j] = "\0";

} else {

// no overflow, just write incremented number back and abort

$iv[$j] = chr($n);

break;

}

}

}

return $str ^ mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $ctrStr, MCRYPT_MODE_ECB);

}

该算法非常简单:您总是要追加IV并增加IV,直到拥有与输入字符串相比更长(或相等长度)的字符串.然后,使用ECB模式对该字符串进行加密,然后将其与输入字符串进行XOR运算.

在这里,增量是复杂的部分,因为我们正在处理二进制数.小尾数表示我们从左到右递增(j = 0,j <16,j).大尾数将意味着我们从右向左递增(j = 15,j> = 0,j--).

试试看:

$encrypted = base64_decode('MlNFlnXE1sqIsmKZRtjChBvUMgiJlXgdjHVxQJ6JK24Id4uaN9NK/nBtY+cgrMJR/PRJRCmIUx0boQO5XqJYZ8VJ0w==');

$key = base64_decode('HB+dD1Irj2rXQ/nO+IuqSiK9xVE3PD9cZGIGzrMtwtA=');

$iv = base64_decode('2gxxKYU/G4lj7174e5wj+g==');

var_dump(ctr_crypt($encrypted, $key, $iv));

// string(67) "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do..."

注意:ctr_crypt既可以用作加密功能,也可以用作解密功能.

标签:commoncrypto,mcrypt,aes,cryptography,php

来源: https://codeday.me/bug/20191123/2066695.html

php ctr b,用PHP解密AES CTR Little Endian相关推荐

  1. [crypto]-52-python3中rsa(签名验签加密解密)aes(ecb cbc ctr)hmac的使用,以及unittest测试用

    环境: 在ubuntu14.04下,记得安装:sudo pip3 install pycrypto 代码示例1: =========================== import base64 f ...

  2. java aes 256 ctr,AES CTR 256 OpenSSL上的加密操作模式

    新的OpenSSL,任何人可以给我一个提示如何从C文件初始化AES CTR模式.我知道这是方法的签名,但我有参数的问题,没有很多文档没有一个明确的例子如何进行简单的加密.如果有人可以举例说明这种方法的 ...

  3. [crypto]-01-对称加解密AES原理概念详解

    1.对称加解密 术语:P是明文,C是密文,K是密钥,E是加密算法,D是解密算 (1).常用的对称加解密有哪些? (2).加解密的模式 [ecb]这种模式是将整个明文分成若干段相同的小段,然后对每一小段 ...

  4. ctr 平滑_广告计算——平滑CTR

    一.广告计算的基本概念 1.广告的形式 在互联网发展的过程中,广告成为了互联网企业盈利的一个很重要的部分,根据不同的广告形式,互联网广告可以分为: 展示广告(display ads) 赞助商搜索广告( ...

  5. Qt写的超级方便的编码转换器、加解密AES、RSA、MD5、SHA、网页编码

    Qt彻底解决乱码问题,各种编码转换工具 Qt写的超级方便的编码转换器.加解密AES.RSA.MD5.SHA.网页编码 一键把内容转换成GBK.UTF-8.UTF-16FE.UTF-16BE.GB231 ...

  6. 前端JavaScript AES解密 AES加密 ECB模式

    项目里使用过md5.base64,使用AES的安全系数会高一些. 高级加密标准(AES,Advanced Encryption Standard)为最常见的对称加密算法,微信小程序加密传输就是用这个加 ...

  7. php aes加密 ctr,使用aes+ctr的加密问题

    我可能会迟到,我可能忽略了之前的答案,但我没有找到一个明确的声明,说明如何(至少是imho)根据密码包来完成这项工作. crypto.util.counter包提供了可调用的状态计数器,这非常有用,但 ...

  8. java 猜密码 本地程序 模拟_java – 使用AES / CTR模拟流密码

    我正在编写一个应用程序服务器,我决定使用AES128 / CTR / NoPadding来保护连接,因为它被认为足够安全而不必将字节扩展到块边界,我认为它非常适合TCP.在逻辑上是一个无缝的流. 问题 ...

  9. python aes padding_python笔记43-加解密AES/CBC/pkcs7padding

    前言 有些公司对接口的安全要求比较高,传参数的时候,不会明文的传输,先对接口加密,返回的数据也加密返回. 目前比较常见的加密方式是AES/CBC/pkcs7padding. AES五种加密模式 在AE ...

最新文章

  1. asp.net oracle参数传递,asp.net – Oracle参数问题中的链接数据库
  2. index.php?s=$1,thinkphp nginx配置rewrite,地址会多出个.php
  3. Java Review - 使用Event Bus实现目录变化的监控
  4. EOJ_1070_下落的小球
  5. 计算机python语言_计算机语言Python解释器
  6. mysql not in 转化_解析MySQL隐式转换问题
  7. xms和xmx为什么要相同_为什么开料机价格相差这么多?秘密在这里,你知道吗?...
  8. 609. 在系统中查找重复文件
  9. STM32F103ZET6---【硬件篇】定时器
  10. 说说橡胶软接头安装的误区
  11. linux网卡命名规则及修改ip地址
  12. vue使用svg图片
  13. PV-1033/PV-1233/EVP-M33插装式压力补偿流量阀比例放大器
  14. 表示颜色的英语单词(图)
  15. 浏览器显示无法解析服务器的DNS地址,搜狗浏览器无法解析服务器的DNS地址怎么解决...
  16. 【论文笔记】AVSM:结合了仿射配准和vSVF配准的医学图像配准模型
  17. python中的连乘_python连乘
  18. 散——TIPS(C语言)
  19. 企业wifi统一认证怎样呀
  20. MUI框架获取下拉框SELECT选中值

热门文章

  1. vscode运行OpenCV项目时出现undefined reference to cv::xxxx
  2. 永磁直驱风机MPPT最大功率点跟踪Simulink仿真模型,采用占空比扰动观察法
  3. 【肥朝】从JDK中,我们能学到哪些设计模式?
  4. 【带移动搜索功能】织梦dedecms手机WAP插件专业版 织梦自动建手机WAP站 PC+WAP数据同步更新 访问自动跳转
  5. 计算机视觉有哪些SCI期刊? - 易智编译EaseEditing
  6. 看美文,记单词(7)
  7. 带有示例的Python date weekday()方法
  8. 代码优化大盘点:35 个 Java 代码优化魔鬼细节
  9. 价值链价值流分析方法对成本控制的启示(zt)
  10. 第一次实习经历分享Android开发