0
我正在使用CryptoJS加密用戶名和密碼並在我的Coldfusion/Railo服務器上的遠程CFC上解密它。我收到的錯誤消息是:鑑於最終塊未正確填充。我看過相關的主題,但我無法將解決方案「翻譯」成我的案例。Coldfusion解密將無法與CryptoJS一起使用:鑑於最終塊未正確填充
這裏是調用服務器上的功能的JavaScript:
var username = "[email protected]"
var password = "12345"
var ident = username.concat('|',password)
var key = CryptoJS.enc.Utf8.parse("dotterbloem20151");
var key = CryptoJS.enc.Base64.stringify(key);
var encrypted = CryptoJS.AES.encrypt(ident, key, {iv: key});
//In my JS the encryption/decryption works fine
var decrypted = CryptoJS.AES.decrypt(encrypted, key, {iv: key});
document.write(decrypted.toString(CryptoJS.enc.Utf8));
document.write('<BR>')
document.write(decrypted.toString(key));
var url = "cfc/roland.cfc?method=checkLoginstatus";
$.ajax({
url: url,
type: 'POST',
dataType: "json",
data: { "webkey" : encrypted.toString() },
success: function(response) {
}
});
這裏是我的CFC功能:
<cffunction name="checkLoginstatus" access="remote" returntype="any" returnformat="plain">
<cfargument name="webkey" />
<cfoutput>
<cfset myKey = Tobase64("dotterbloem20151") />
<cfset myIV = charsetDecode("dotterbloem20151", "utf-8")>
#Decrypt(ARGUMENTS.webkey, myKey, "AES/CBC/PKCS5Padding", "base64", myIV)#
</cfoutput>
</cffunction>
它不起作用的原因是,當你使用一個字符串,即'CryptoJS.enc.Base64.stringify(key)',該字符串被視爲密碼短語,並被用於*派生*加密密鑰。所以實際的「關鍵」與你在CF中使用的不一樣。爲了工作,您需要使用「WordArray」(或二進制)代替。但是,正如Artjom B.指出的那樣,這兩種方法都不是很安全。這類似於鎖定你的房子,但把鑰匙留在前門上。 – Leigh