为什么我使用 crypto-js 为不同的 pdf 文件获得相同的哈希值?
Why do I get the same hash for different pdf files using crypto-js?
我上传了一个 pdf 文件并使用 crypto-js 从中创建了一个散列,但无论我上传哪个文件,我总是得到相同的散列。另外,当我使用在线工具创建哈希时,我得到的哈希与我从文件中得到的哈希不对应。
我对 txt 文件有同样的问题,如果我从资产目录加载文件。我也试过其他库,也有同样的问题。
我错过了什么?
我用的是Angular6。下面是我的做法。
import { Component } from '@angular/core';
import sha256 from 'crypto-js/sha256';
@Component({
selector: 'ct-sign-page',
templateUrl: './sign-page.component.html',
styles: []
})
export class SignPageComponent {
public file: File;
public fileChange(event): void {
this.file = event.target.files[0];
const hash = sha256(this.file);
console.log(hash.toString());
}
}
更新:
如果我在创建哈希之前记录 this.file,这就是我得到的结果。
File
lastModified: 1603727900290
lastModifiedDate: Mon Oct 26 2020 16:58:20 GMT+0100 (Central European Standard Time) {}
name: "sample.pdf"
size: 3028
type: "application/pdf"
webkitRelativePath: ""
__proto__: File
您可以使用 FileReader
读取文件并根据其内容创建哈希。
虽然我不确定它为什么生成相同的散列,但我猜它与某些内部方法有关,例如 toString()
,其中 return 任何 event.target.files[0]
的相同字符串。
fileChange = (event) => {
var file = event.target.files[0];
const fileReader = new FileReader();
fileReader.addEventListener('loadend', (evt) => {
if (evt.target.readyState == FileReader.DONE) {
const hash = CryptoJS.SHA256(fileReader.result);
console.log(hash.toString());
}
});
fileReader.readAsDataURL(file);
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/4.0.0/crypto-js.min.js"></script>
<input type="file" #fileInput onchange="fileChange(event)" />
我上传了一个 pdf 文件并使用 crypto-js 从中创建了一个散列,但无论我上传哪个文件,我总是得到相同的散列。另外,当我使用在线工具创建哈希时,我得到的哈希与我从文件中得到的哈希不对应。 我对 txt 文件有同样的问题,如果我从资产目录加载文件。我也试过其他库,也有同样的问题。
我错过了什么?
我用的是Angular6。下面是我的做法。
import { Component } from '@angular/core';
import sha256 from 'crypto-js/sha256';
@Component({
selector: 'ct-sign-page',
templateUrl: './sign-page.component.html',
styles: []
})
export class SignPageComponent {
public file: File;
public fileChange(event): void {
this.file = event.target.files[0];
const hash = sha256(this.file);
console.log(hash.toString());
}
}
更新: 如果我在创建哈希之前记录 this.file,这就是我得到的结果。
File
lastModified: 1603727900290
lastModifiedDate: Mon Oct 26 2020 16:58:20 GMT+0100 (Central European Standard Time) {}
name: "sample.pdf"
size: 3028
type: "application/pdf"
webkitRelativePath: ""
__proto__: File
您可以使用 FileReader
读取文件并根据其内容创建哈希。
虽然我不确定它为什么生成相同的散列,但我猜它与某些内部方法有关,例如 toString()
,其中 return 任何 event.target.files[0]
的相同字符串。
fileChange = (event) => {
var file = event.target.files[0];
const fileReader = new FileReader();
fileReader.addEventListener('loadend', (evt) => {
if (evt.target.readyState == FileReader.DONE) {
const hash = CryptoJS.SHA256(fileReader.result);
console.log(hash.toString());
}
});
fileReader.readAsDataURL(file);
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/4.0.0/crypto-js.min.js"></script>
<input type="file" #fileInput onchange="fileChange(event)" />