Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Encryption 使用ColdFusion加密SagePay表单_Encryption_Coldfusion_Cryptography_Opayo - Fatal编程技术网

Encryption 使用ColdFusion加密SagePay表单

Encryption 使用ColdFusion加密SagePay表单,encryption,coldfusion,cryptography,opayo,Encryption,Coldfusion,Cryptography,Opayo,我正在尝试使用ColdFusion 10遵循SagePay 3.00中加密字段的规范 要求在CBC模式下将字符串加密为AES(块大小128位),使用PKCS#5填充,使用提供的密码作为密钥和初始化向量,并将结果编码为十六进制 是“使用提供的密码”导致了问题 目前我有 myStr = 'assortednamevaluepairsetc'; providedPassword = 'abcdefghijklmnop'; myCrypt = Encrypt(myStr,providedPassword

我正在尝试使用ColdFusion 10遵循SagePay 3.00中加密字段的规范

要求在CBC模式下将字符串加密为AES(块大小128位),使用PKCS#5填充,使用提供的密码作为密钥和初始化向量,并将结果编码为十六进制

是“使用提供的密码”导致了问题

目前我有

myStr = 'assortednamevaluepairsetc';
providedPassword = 'abcdefghijklmnop';
myCrypt = Encrypt(myStr,providedPassword,'AES/CBC/PKCS5Padding','HEX',providedPassword,1);
但这不起作用,因为SagePay给我的值会导致错误——“指定的密钥不是此加密的有效密钥:无效的AES密钥长度”,因为它只有16个字符长

根据CF文档,您需要使用GenerateCretKey来保证AES的密钥长度,因此我尝试了这个方法,但尽管它给出了一个结果,但就加密而言,它不是正确的结果

myStr = 'assortednamevaluepairsetc';
providedPassword = 'abcdefghijklmnop';
mySecret = GenerateSecretKey('AES');
myCrypt = Encrypt(myStr,mySecret,'AES/CBC/PKCS5Padding','HEX',providedPassword,1);
在这方面的任何帮助都将得到感激

使用GenerateCretKey来 保证AES的密钥长度

该函数仅在需要生成全新的加密密钥时使用。你已经有了。
generateSecretKey
的主要目的是确保生成强加密密钥,即

不起作用,因为SagePay给我的值会导致 错误-“指定的密钥不是此加密的有效密钥:无效 AES密钥长度“仅为16个字符长

AES可接受的密钥长度为。问题是期望“密钥”是一个编码字符串,它比普通字符串长约33%。调用encrypt(..)时,CF将提供的“密钥”字符串解码为字节,即基本上执行以下操作:

  <cfset keyBytes = binaryDecode(yourPassword, "base64")>
  <cfoutput>length = #arrayLen(keyBytes)# bytes</cfoutput>
注:我不是一个加密专家,但。。。把钥匙当作静脉注射是。。。可能想和他们核实一下,看看是否还有其他选择

使用GenerateCretKey来 保证AES的密钥长度

该函数仅在需要生成全新的加密密钥时使用。你已经有了。
generateSecretKey
的主要目的是确保生成强加密密钥,即

不起作用,因为SagePay给我的值会导致 错误-“指定的密钥不是此加密的有效密钥:无效 AES密钥长度“仅为16个字符长

AES可接受的密钥长度为。问题是期望“密钥”是一个编码字符串,它比普通字符串长约33%。调用encrypt(..)时,CF将提供的“密钥”字符串解码为字节,即基本上执行以下操作:

  <cfset keyBytes = binaryDecode(yourPassword, "base64")>
  <cfoutput>length = #arrayLen(keyBytes)# bytes</cfoutput>

注:我不是一个加密专家,但。。。把钥匙当作静脉注射是。。。可能想和他们核实一下,看看是否还有其他选择。

谢谢你,Leigh,这绝对是个好主意。干杯,谢谢你,李,这绝对是个好消息。多姆干杯
 encrypt(myStr, base64Key,"AES/CBC/PKCS5Padding", "hex", keyIVBytes)