我认为问题可能出在函数序列化上——CryoJS 显然试图序列化函数,但它可能无法正确恢复引用(范围丢失)。
下面的代码通过只恢复数据而不是函数来规避这个问题。JSF中。
(反)序列化功能:
/** Serialize MD5 object. */
function stringify_md5(md5) {
return JSON.stringify(md5);
}
/** Deserialize MD5 object. */
function parse_md5(serialized_md5) {
var md5 = CryptoJS.algo.MD5.create();
restore_data(JSON.parse(serialized_md5), md5);
return md5;
}
/** Recursively copy properties from object source to object target. */
function restore_data(source, target) {
for (var prop in source) {
var value = source[prop];
if (typeof value == "object") {
if (typeof target[prop] != "object") {
target[prop] = {};
}
restore_data(source[prop], target[prop]);
} else {
target[prop] = source[prop];
}
}
}
使用示例:
var chunk1 = "abc", chunk2 = "def";
// The correct hash:
var md5_full_1 = CryptoJS.algo.MD5.create();
md5_full_1.update(chunk1);
md5_full_1.update(chunk2);
var correct_hash = md5_full_1.finalize();
// Using stringify/parse
var md5_full_2 = CryptoJS.algo.MD5.create();
md5_full_2.update(chunk1);
var md5_serialized = stringify_md5(md5_full_2); // serialize
md5_full_2 = parse_md5(md5_serialized); // deserialize
md5_full_2.update(chunk2);
var result_hash = md5_full_2.finalize();
alert(correct_hash.toString() == result_hash.toString()); // true
(由于某种原因,使用 WordArray 在 CryptoJS 中给我一个错误)