生成pdf后计算其哈希值



我正在尝试计算我用pdfmake(在客户端(生成的pdf文件的校验和。我使用的代码是。。

/// docDefinition.......   
const pdfDocGenerator = pdfMake.createPdf(docDefinition);
pdfDocGenerator.getBlob((blob) => {

var reader = new FileReader();

reader.readAsArrayBuffer(blob);

reader.onload = function () {

var file_result = this.result; 
var file_wordArr = CryptoJS.lib.WordArray.create(file_result);
var sha256_hash = CryptoJS.SHA256(file_wordArr); 
var Hash = sha256_hash.toString(); //output result

};
});

但当我下载pdf并在其他一些网站上查看我的sha256时,它永远不会匹配。每次我生成pdf时,散列都会发生变化,尽管pdf的文档定义是相同的。我尝试了getBuffer函数,结果是一样的。

我的解决方案快用完了。谢谢你的帮助。

每次生成pdf时,哈希都会发生变化,即使pdf的文档定义是相同的。

pdf生成器通常会将元数据(如创建时间上次操作时间oc定义相等,但生成的pdf通常略有不同,从而产生不同的哈希值。

因此,你所观察到的实际上是意料之中的、正常的。

所以,我想我已经找到了一些东西,这要归功于mkl答案。诀窍是几乎同时生成哈希并提示下载文件。

但首先,如果您使用的是pdfMake,则需要从_proto.download函数中获取blob。

_proto.download = function download(filename) {
var _this2 = this;
if (filename === void 0) {
filename = 'file.pdf';
}
return new Promise(function (resolve, reject) {
_this2.getBlob().then(function (blob) {
Object(FileSaver_min["saveAs"])(blob, filename);
resolve();
}, function (result) {
reject(result);
});
});
}

我做了一个修改版本来获得斑点。

_proto.downloadModified= function download(filename) {
var _this2 = this;
if (filename === void 0) {
filename = 'file.pdf';
}
return new Promise(function (resolve, reject) {
_this2.getBlob().then(function (blob) {

resolve(blob);
}, function (result) {
reject(result);
});
});
}

然后我设置了namelastModifiedDate



blob.lastModifiedDate =  new Date();
blob.name = "contrat-cession-da"

var reader = new FileReader();
reader.readAsArrayBuffer(blob);

reader.onload = function () {


var file_result = this.result; // this == reader, get the loaded file "result"
var file_wordArr = CryptoJS.lib.WordArray.create(file_result); //convert blob to WordArray , see https://code.google.com/p/crypto-js/issues/detail?id=67
var sha256_hash = CryptoJS.SHA256(file_wordArr); //calculate SHA1 hash
var Hash = sha256_hash.toString(); //output result
saveAs(blob); 

现在,您可以生成blob的哈希(在使用cryptojs将其读取为Array之后(,并使用saveAs提示下载,它将为您提供相同的哈希。

最新更新