use std::collections::hash_map::DefaultHasher;
use std::hash::{Hash, Hasher};
use std::time::{SystemTime, UNIX_EPOCH};
fn generate_secure_token_512(system_ip: &str, system_name: &str, secret_key: &str) -> String {
let mut token = String::new();
for i in 0..8 {
let mut hasher = DefaultHasher::new();
let timestamp = SystemTime::now()
.duration_since(UNIX_EPOCH)
.unwrap()
.as_nanos();
let combined = format!("{}:{}:{}:{}:{}", system_ip, system_name, secret_key, timestamp, i);
combined.hash(&mut hasher);
token.push_str(&format!("{:016x}", hasher.finish()));
}
token.truncate(128);
token
}
fn generate_simple_token_512() -> String {
let mut token = String::new();
for i in 0..8 {
let mut hasher = DefaultHasher::new();
let timestamp = SystemTime::now()
.duration_since(UNIX_EPOCH)
.unwrap()
.as_nanos();
let combined = format!("{}:{}", timestamp, i);
combined.hash(&mut hasher);
token.push_str(&format!("{:016x}", hasher.finish()));
}
token.truncate(128);
token
}
fn main() {
println!("=== 512位Token生成工具 ===\n");
let secret_key = "db_sync_secret_key_2025";
let system1_ip = "10.124.18.43";
let system1_name = "新峰人力资源管理系统";
let token1 = generate_secure_token_512(system1_ip, system1_name, secret_key);
println!("系统1 - 新峰人力资源管理系统:");
println!("系统IP: {}", system1_ip);
println!("系统名称: {}", system1_name);
println!("Token长度: {} 位", token1.len() * 4); println!("生成的Token: {}\n", token1);
let system2_ip = "10.124.18.14";
let system2_name = "西峰集团资产管理系统";
let token2 = generate_secure_token_512(system2_ip, system2_name, secret_key);
println!("系统2 - 西峰集团资产管理系统:");
println!("系统IP: {}", system2_ip);
println!("系统名称: {}", system2_name);
println!("Token长度: {} 位", token2.len() * 4);
println!("生成的Token: {}\n", token2);
println!("=== Token验证 ===");
if token1 != token2 {
println!("✓ 两个系统的token不相同,安全性良好");
} else {
println!("✗ 警告:两个系统的token相同,存在安全风险!");
}
println!("\n=== 服务端配置文件 (server.config.json) ===");
println!("{{
\"listen_addr\": \"10.124.108.156:21005\",
\"data\":[
{{
\"system_name\":\"新峰人力资源管理系统\",
\"system_ip\":\"10.124.18.43\",
\"backup_dir\": \"F:/DB_BACKUP_DIR/10.124.18.43\",
\"auth_token\": \"{}\"
}},
{{
\"system_name\":\"西峰集团资产管理系统\",
\"system_ip\":\"10.124.18.14\",
\"backup_dir\": \"F:/DB_BACKUP_DIR/10.124.18.14\",
\"auth_token\": \"{}\"
}}
]
}}", token1, token2);
println!("\n=== 客户端配置文件 (client.config.json) ===");
println!("{{
\"data\":[
{{
\"system_name\":\"新峰人力资源管理系统\",
\"system_ip\":\"10.124.18.43\",
\"backup_server_url\": \"http://10.124.108.156:21005\",
\"auth_token\": \"{}\",
\"local_backup_dir\": \"F:/webhr_backup/data\"
}},
{{
\"system_name\":\"西峰集团资产管理系统\",
\"system_ip\":\"10.124.18.14\",
\"backup_server_url\": \"http://10.124.108.156:21005\",
\"auth_token\": \"{}\",
\"local_backup_dir\": \"F:/databack/\"
}}
]
}}", token1, token2);
println!("\n=== 使用说明 ===");
println!("1. 每个系统都有独立的512位token");
println!("2. 将对应的token复制到服务端和客户端配置文件中");
println!("3. 确保同一系统的服务端和客户端使用相同的token");
println!("4. 在生产环境中,应该使用更安全的密钥管理方式");
println!("5. 可以定期更换token以提高安全性");
println!("\n=== 安全建议 ===");
println!("1. 不要在代码中硬编码密钥");
println!("2. 使用环境变量或安全的密钥存储方案");
println!("3. 定期轮换token(建议每3-6个月)");
println!("4. 监控异常的认证请求");
println!("5. 在生产环境中使用HTTPS协议");
println!("6. 限制token的访问权限和使用范围");
}