JavaScript   发布时间:2022-04-16  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了javascript – 将CryptoJS的CryptoMD5状态保存为字符串并稍后恢复大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

我在上传期间逐渐计算大文件的MD5哈希,然后在某些时候我想保存到HTML5 localStorage到目前为止我计算的内容,以便稍后恢复.

据我所知,localStorage可以存储字符串,因此我必须将渐进式MD5值存储为字符串,然后在用户稍后打开浏览器时将其还原.

基本上我的代码看起来像这样

@H_675_10@var md5_full = CryptoJs.algo.MD5.create();

var wordArray = CryptoJs.lib.WordArray.create(chunk);

md5_full.update(wordArray);

此时,我想将md5_full转换为字符串,以便能够保存到localStorage.然后,稍后,当用户想要恢复上传时,能够从localStorage检索md5_full,解除束缚,并继续使用块更新它.

最后我应该能够调用md5_full.finalize();获取最终的完整MD5哈希摘要.

最佳答案
我认为问题可能在于函数序列化–CryoJS显然试图序列化函数,但它可能无法正确恢复引用(范围丢失).

下面的代码通过仅恢复数据而不是函数来解决此问题. JSFiddle.

(DE)序列化功能:

@H_675_10@/** 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];
        }
    }
}

用法示例:

@H_675_10@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中抛出了一个错误)

大佬总结

以上是大佬教程为你收集整理的javascript – 将CryptoJS的CryptoMD5状态保存为字符串并稍后恢复全部内容,希望文章能够帮你解决javascript – 将CryptoJS的CryptoMD5状态保存为字符串并稍后恢复所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。