要实现本地托管文件的子资源完整性检查,可以使用以下步骤:
const crypto = require('crypto');
const fs = require('fs');
function generateHash(filepath) {
return new Promise((resolve, reject) => {
const hash = crypto.createHash('sha256');
const stream = fs.createReadStream(filepath);
stream.on('data', (data) => {
hash.update(data);
});
stream.on('end', () => {
const hashValue = hash.digest('hex');
resolve(hashValue);
});
stream.on('error', (error) => {
reject(error);
});
});
}
const filepath = '/path/to/your/file.js';
generateHash(filepath)
.then((hashValue) => {
console.log('Hash value:', hashValue);
})
.catch((error) => {
console.error('Error:', error);
});
function verifyIntegrity(subresourceUrl, expectedHash) {
return new Promise((resolve, reject) => {
fetch(subresourceUrl)
.then((response) => {
return response.arrayBuffer();
})
.then((buffer) => {
const hash = crypto.createHash('sha256');
hash.update(buffer);
const hashValue = hash.digest('hex');
if (hashValue === expectedHash) {
resolve(true);
} else {
resolve(false);
}
})
.catch((error) => {
reject(error);
});
});
}
const subresourceUrl = '/path/to/your/file.js';
const expectedHash = 'your-precomputed-hash-value';
verifyIntegrity(subresourceUrl, expectedHash)
.then((isValid) => {
console.log('Is valid:', isValid);
})
.catch((error) => {
console.error('Error:', error);
});
请注意,以上示例代码仅供参考,具体实现可能需要根据您的特定需求进行调整。此外,这种哈希验证方法可以用于任何类型的文件,不仅限于JavaScript文件。