/** * OTP功能测试文件 * 可以在Node.js环境中运行此文件进行测试 */ const otp = require('./otp.js'); /** * 测试TOTP功能 */ async function testTOTP() { console.log('===== 测试TOTP功能 ====='); try { // 生成随机密钥 const secret = otp.generateSecret(); console.log(`生成的密钥: ${secret}`); // 生成TOTP const token = await otp.generateTOTP(secret); console.log(`当前TOTP: ${token}`); // 验证TOTP const isValid = await otp.verifyTOTP(token, secret); console.log(`验证结果: ${isValid ? '通过' : '失败'}`); // 获取剩余时间 const remaining = otp.getRemainingSeconds(); console.log(`剩余有效时间: ${remaining}秒`); // 测试不同哈希算法 console.log('\n不同哈希算法测试:'); for (const algo of Object.keys(otp.HASH_ALGOS)) { const algoToken = await otp.generateTOTP(secret, { algorithm: algo }); console.log(`${algo}: ${algoToken}`); } // 测试不同位数 console.log('\n不同位数测试:'); for (const digits of [6, 7, 8]) { const digitToken = await otp.generateTOTP(secret, { digits }); console.log(`${digits}位: ${digitToken}`); } // 测试不同时间窗口 console.log('\n不同时间窗口测试:'); for (const period of [30, 60, 90]) { const periodToken = await otp.generateTOTP(secret, { period }); console.log(`${period}秒: ${periodToken}`); } // 生成URI const uri = otp.generateTOTPUri(secret, 'test@example.com', 'TestApp'); console.log(`\nTOTP URI: ${uri}`); // 解析URI const parsedUri = otp.parseOTPUri(uri); console.log('解析URI结果:', parsedUri); // 测试Steam令牌 const steamToken = await otp.generateSteamToken(secret); console.log(`\nSteam令牌: ${steamToken}`); console.log('\nTOTP测试完成'); } catch (error) { console.error('TOTP测试失败:', error); } } /** * 测试HOTP功能 */ async function testHOTP() { console.log('\n===== 测试HOTP功能 ====='); try { // 生成随机密钥 const secret = otp.generateSecret(); console.log(`生成的密钥: ${secret}`); // 测试不同计数器值 console.log('\n不同计数器值测试:'); for (let counter = 0; counter < 5; counter++) { const token = await otp.generateHOTP(secret, counter); console.log(`计数器 ${counter}: ${token}`); // 验证HOTP const result = await otp.verifyHOTP(token, secret, counter); console.log(`验证结果: ${result !== false ? '通过' : '失败'}`); } // 测试窗口验证 console.log('\n窗口验证测试:'); const token = await otp.generateHOTP(secret, 5); for (let counter = 3; counter <= 7; counter++) { const result = await otp.verifyHOTP(token, secret, counter, { window: 2 }); console.log(`计数器 ${counter} 验证结果: ${result !== false ? `通过,匹配计数器 ${result}` : '失败'}`); } // 生成URI const uri = otp.generateHOTPUri(secret, 'test@example.com', 'TestApp', 0); console.log(`\nHOTP URI: ${uri}`); // 解析URI const parsedUri = otp.parseOTPUri(uri); console.log('解析URI结果:', parsedUri); console.log('\nHOTP测试完成'); } catch (error) { console.error('HOTP测试失败:', error); } } /** * 运行所有测试 */ async function runTests() { console.log('开始OTP功能测试...\n'); await testTOTP(); await testHOTP(); console.log('\n所有测试完成'); } // 执行测试 runTests().catch(console.error);