UNPKG

fast-md5-web

Version:

A TypeScript project with tsup bundler for Rust WASM MD5 calculation

120 lines (98 loc) 4.65 kB
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>MD5 问题调试</title> <script src="https://cdn.jsdelivr.net/npm/spark-md5@3.0.2/spark-md5.min.js"></script> <script type="module"> import init, { Md5Calculator } from './wasm_md5.js'; let md5Calculator; async function initWasm() { try { await init('./wasm_md5_bg.wasm'); md5Calculator = new Md5Calculator(); md5Calculator.set_log_enabled(true); console.log('WASM 模块初始化成功'); runTests(); } catch (error) { console.error('WASM 初始化失败:', error); } } async function runTests() { console.log('开始测试...'); // 测试空文件 await testEmptyFile(); // 测试小文件 await testSmallFile(); // 测试特定内容 await testSpecificContent(); } async function testEmptyFile() { console.log('\n=== 测试空文件 ==='); const emptyData = new Uint8Array(0); // WASM 计算 const wasmResult = await md5Calculator.calculate_md5_async(emptyData, 32); console.log('WASM 结果:', wasmResult); // Spark MD5 计算 const spark = new SparkMD5.ArrayBuffer(); spark.append(emptyData.buffer); const sparkResult = spark.end(); console.log('Spark 结果:', sparkResult); // 预期结果(空文件的MD5) const expected = 'd41d8cd98f00b204e9800998ecf8427e'; console.log('预期结果:', expected); console.log('WASM 匹配:', wasmResult === expected); console.log('Spark 匹配:', sparkResult === expected); console.log('两者一致:', wasmResult === sparkResult); } async function testSmallFile() { console.log('\n=== 测试小文件 ==='); const testData = new TextEncoder().encode('hello world'); // WASM 计算 const wasmResult = await md5Calculator.calculate_md5_async(testData, 32); console.log('WASM 结果:', wasmResult); // Spark MD5 计算 const spark = new SparkMD5.ArrayBuffer(); spark.append(testData.buffer); const sparkResult = spark.end(); console.log('Spark 结果:', sparkResult); // 预期结果("hello world"的MD5) const expected = '5d41402abc4b2a76b9719d911017c592'; console.log('预期结果:', expected); console.log('WASM 匹配:', wasmResult === expected); console.log('Spark 匹配:', sparkResult === expected); console.log('两者一致:', wasmResult === sparkResult); } async function testSpecificContent() { console.log('\n=== 测试特定内容 ==='); // 创建一个1KB的测试文件 const testData = new Uint8Array(1024); for (let i = 0; i < testData.length; i++) { testData[i] = i % 256; } // WASM 计算 const wasmResult = await md5Calculator.calculate_md5_async(testData, 32); console.log('WASM 结果:', wasmResult); // Spark MD5 计算 const spark = new SparkMD5.ArrayBuffer(); spark.append(testData.buffer); const sparkResult = spark.end(); console.log('Spark 结果:', sparkResult); console.log('两者一致:', wasmResult === sparkResult); // 测试不同长度的MD5 const wasm16 = await md5Calculator.calculate_md5_async(testData, 16); console.log('WASM 16位:', wasm16); console.log('Spark 16位:', sparkResult.substring(0, 16)); console.log('16位一致:', wasm16 === sparkResult.substring(0, 16)); } // 初始化 initWasm(); </script> </head> <body> <h1>MD5 问题调试</h1> <p>请打开浏览器控制台查看测试结果</p> <div id="results"></div> </body> </html>