coldfusion php,PHP加密代码转换为ColdFusion
我有一些PHP,我想在ColdFusion中做相同的操作.
function & _encryptMessage( $message ) {
$td = mcrypt_module_open( MCRYPT_RIJNDAEL_256, '', MCRYPT_MODE_CBC, '');
mcrypt_generic_init( $td, $this->key, $this->iv );
$encrypted_data = mcrypt_generic( $td, $message );
mcrypt_generic_deinit($td);
mcrypt_module_close($td);
return base64_encode( $encrypted_data );
}
我认为这只是
encrypt(message,"","AES","Base64")
但是我没有真正的确定方式,而且感觉不对,所以我想知道是否有人能够指出我正确的方向.
所以MCRYPT_RIJNDAEL_256实际上意味着block size not the encryption strength.加密强度仍然是256,因为使用在sha-256处散列的值在PHP中生成密钥和salt.
这是我现在的加密调用:
加密(arguments.messageXML,instance.key, “AES / CBC / PKCS5Padding”, “Base64的”,ivSalt)
不幸的是,由于ivSalt的长度为32字节(256位),而AES只需要16字节的iv盐,因此会爆炸.看看here,看起来ColdFusion / Java中AES的最大块大小是16字节(128位).我似乎无法看到如何获得256位块大小.任何帮助将不胜感激.
解决方法:
正如Leigh建议我必须使用Bouncy Castle,轻量级API和Rijndael密码引擎.
我最终创建了一个函数来创建一个rijndael密码,并使用密钥和ivsalt加密和解密字符串.
// Create a block cipher for Rijndael
var cryptEngine = createObject("java", "org.bouncycastle.crypto.engines.RijndaelEngine").init(arguments.blocksize);
// Create a Block Cipher in CBC mode
var blockCipher = createObject("java", "org.bouncycastle.crypto.modes.CBCBlockCipher").init(cryptEngine);
// Create Padding - Zero Byte Padding is apparently PHP compatible.
var zbPadding = CreateObject('java', 'org.bouncycastle.crypto.paddings.ZeroBytePadding').init();
// Create a JCE Cipher from the Block Cipher
var cipher = createObject("java", "org.bouncycastle.crypto.paddings.PaddedBufferedBlockCipher").init(blockCipher,zbPadding);
// Create the key params for the cipher
var binkey = binarydecode(arguments.key,"hex");
var keyParams = createObject("java", "org.bouncycastle.crypto.params.KeyParameter").init(BinKey);
var binIVSalt = Binarydecode(ivSalt,"hex");
var ivParams = createObject("java", "org.bouncycastle.crypto.params.ParametersWithIV").init(keyParams, binIVSalt);
cipher.init(javaCast("boolean",arguments.bEncrypt),ivParams);
return cipher;
var cipher = createRijndaelBlockCipher(key=arguments.key,ivSalt=arguments.ivSalt);
var byteMessage = arguments.message.getBytes();
var outArray = getByteArray(cipher.getOutputSize(arrayLen(byteMessage)));
var bufferLength = cipher.processBytes(byteMessage, 0, arrayLen(byteMessage), outArray, 0);
var cipherText = cipher.doFinal(outArray,bufferLength);
return toBase64(outArray);
var cipher = createRijndaelBlockCipher(key=arguments.key,ivSalt=arguments.ivSalt,bEncrypt=false);
var byteMessage = toBinary(arguments.message);
var outArray = getByteArray(cipher.getOutputSize(arrayLen(byteMessage)));
var bufferLength = cipher.processBytes(byteMessage, 0, arrayLen(byteMessage), outArray, 0);
var originalText = cipher.doFinal(outArray,bufferLength);
return createObject("java", "java.lang.String").init(outArray);
function getByteArray(someLength)
{
byteClass = createObject("java", "java.lang.Byte").TYPE;
return createObject("java","java.lang.reflect.Array").newInstance(byteClass, someLength);
}
doEncrypt和doDecrypt函数是公开可见的,但不是创建rijndael密码的函数.加密和解密函数分别使用字符串,密钥和ivSalt返回加密或解密的字符串.
createRijndaelBlockCipher接受一个密钥,ivSalt,一个布尔值来说明密码是否将用于加密或解密以及块大小,尽管块大小默认为256位.这个功能得到了很好的评论,所以它应该有意义.
底部的UDF(特别感谢Jason Delmore的那个块)确保ColdFusion正确地为解密创建一个字节数组.创建字节数组的其他一些方法不起作用或最终在解密或抛出缓冲区错误中导致不一致的结果.
这是真的.当标准AES加密使用128位块和128位密钥用于分类为SECRET,192位或更高的TOP-SECRET时,需要花费太多精力. 256位块和256位键仅略高于顶部.只是因为你不能意味着你应该这样做.
请记住,MCRYPT_RIJNDAEL_256是块大小而不是加密级别.加密级别由传递给mcrypt_encrypt的密钥强度设置,增加块大小不会增加加密强度.
标签:rijndael,php,encryption,aes,coldfusion
来源: https://codeday.me/bug/20191007/1865641.html
coldfusion php,PHP加密代码转换为ColdFusion相关推荐
- PHP简单的字符串加密与加密代码
PHP简单的字符串加密与加密代码 代码 //加密算法 function encode($string = '', $skey = 'cxphp') {$strArr = str_split(base6 ...
- matlab生成vhdl程序,使用HDL Workflow Advisor将matlab代码转换为vhdl
我制作了一个Matlab程序,用于检测2个圆形是否相互交叉并输出交点的坐标.现在,我试图将代码转换为vhdl来实现FPGA. 我的代码中HDL Workflow Advisor中仍然存在错误的函数之一 ...
- utf-8转换gbk代码_将代码转换为现金-如何以Web开发人员的身份赚钱并讲述故事。...
utf-8转换gbk代码 by Kurt 由库尔特 将代码转换为现金-如何以Web开发人员的身份赚钱并讲述故事. (Turning code to cash - How to make money a ...
- 使用Visio 2000逆向工程将代码转换为UML图表
From: http://www.sudu.cn/info/html/website/20080508/307109.html 摘要:Microsoft Visio 2000 Professional ...
- fortran转换 matlab代码,将Fortran77代码转换为Matlab代码以查找特征值/向量
我将Fortran 77中的书面代码转换为Matlab代码.该函数使用QL算法计算矩阵的特征值和特征向量.由于某些原因,我不能在matlab中使用eig函数的结果.这种方法得到的特征值与eig函数得到 ...
- cython加密代码python_利用Cython对python代码进行加密
利用Cython对python代码进行加密 Cython是属于PYTHON的超集,他首先会将PYTHON代码转化成C语言代码,然后通过c编译器生成可执行文件.优势:资源丰富,适合快速开发.翻译成C后速 ...
- Matlab 生成vhdl,matlab - 使用HDL Workflow Advisor将Matlab代码转换为vhdl - 堆栈内存溢出...
我制作了一个Matlab程序,它可以检测2个圆是否相交,并输出相交的坐标. 现在,我正在尝试将代码转换为vhdl以进行FPGA实现. 我的代码中在HDL Workflow Advisor中仍然存在错误 ...
- [.NET] 怎样使用 async await 一步步将同步代码转换为异步编程
怎样使用 async & await 一步步将同步代码转换为异步编程 [博主]反骨仔 [出处]http://www.cnblogs.com/liqingwen/p/6079707.html ...
- 使用p4c将P4 14代码转换为16代码
参考: [Question] How to make conversion between P4 14 and P4 16? 使用p4c将P4 14代码转换为16代码: $ p4test --p4v ...
- 将python代码转换为flowchart代码
将python代码转换为flowchart代码 慢慢来,报错莫着急 将python代码转换为flowchart代码 问题描述及原因明细 提示:这里除了遇到的问题还有解决方案 报错:UnicodeDec ...
最新文章
- R语言使用ggplot2包geom_jitter()函数绘制分组(strip plot,一维散点图)带状图(改变分组次序)实战
- C# 温故知新 基础篇(7) 接口思维导图
- 怎么取消苹果手机自动续费_手机 App 自动续费套路多?我们要如何取消?
- 在VS中进行对项目进行编译出现不能编译的问题
- agp模式_AGP的完整形式是什么?
- 6-6 求二叉树高度 (15 分)
- 二分答案——小车问题(洛谷 P1258)
- sql profiler_这是SQL Profiler的结尾吗?
- azure创建centos_使用Azure Power BI创建Azure数据仓库报告
- MIT博士小姐姐的机器学习入门教程开课!碎片时间服用,每周一更 | 资源
- Redis实现微博后台业务逻辑系列(八)
- 古文(诗词文)—— 结构模式与复用
- Ext2、Ext3、Ext4的区别
- md5加密算法使用流程
- 互联网后端的主流编程语言是啥?不是Python?
- 用arcgis批量裁剪栅格(tiff)数据的矩形区域
- 2019网易校招笔试题 瞌睡
- 科大讯飞AIUI唤醒报错25102
- 用 CSS 画一个带阴影的三角形
- 【Flutter实现表格上下左右滚动】
热门文章
- 又双叒叕上调派送费,这次“四通一达”们能坚持多久?
- DDos-Attack攻击器教程(kali linux)
- c++ vector容器emplace_back
- (分布式网络)基于残差网络的多光谱全色图像分布式融合框架
- 开源虚拟化KVM(一)搭建部署与概述
- 理论小知识:获取AUTO_INCREMENT值
- 简易打折,输入数量金额然后计算打折
- 学phyton第一天
- codeforces1467E. Distinctive Roots in a Tree
- Android开发神器总结