用户密码的加密及解密¶
本文档内容来源于 http://doc.myapps.cn/docs/common-script/common-script-1f1a4b0e6sk5f
脚本说明¶
该脚本用于对用户密码进行加密和解密操作。在MyApps平台中,密码通常需要加密存储,可以使用平台提供的加密工具类进行密码的加密和解密。
密码加密¶
方式1:使用平台加密工具加密密码¶
(function(){
var password = "原始密码";
var Security = new Packages.cn.myapps.common.util.Security();
var encryptedPassword = Security.encryptPassword(password);
return encryptedPassword;
})();
方式2:使用MD5加密密码¶
(function(){
var password = "原始密码";
var MessageDigest = Packages.java.security.MessageDigest;
var md = MessageDigest.getInstance("MD5");
var bytes = md.digest(password.getBytes("UTF-8"));
var sb = new Packages.java.lang.StringBuilder();
for(var i = 0; i < bytes.length; i++){
var hex = Integer.toHexString(0xff & bytes[i]);
if(hex.length == 1){
sb.append('0');
}
sb.append(hex);
}
return sb.toString();
})();
方式3:使用SHA-256加密密码¶
(function(){
var password = "原始密码";
var MessageDigest = Packages.java.security.MessageDigest;
var md = MessageDigest.getInstance("SHA-256");
var bytes = md.digest(password.getBytes("UTF-8"));
var sb = new Packages.java.lang.StringBuilder();
for(var i = 0; i < bytes.length; i++){
var hex = Integer.toHexString(0xff & bytes[i]);
if(hex.length == 1){
sb.append('0');
}
sb.append(hex);
}
return sb.toString();
})();
方式4:使用Base64编码(简单编码,非加密)¶
(function(){
var password = "原始密码";
var Base64 = Packages.java.util.Base64;
var encoder = Base64.getEncoder();
var encoded = encoder.encodeToString(password.getBytes("UTF-8"));
return encoded;
})();
密码解密¶
方式1:使用平台解密工具解密密码¶
(function(){
var encryptedPassword = "加密后的密码";
var Security = new Packages.cn.myapps.common.util.Security();
var decryptedPassword = Security.decryptPassword(encryptedPassword);
return decryptedPassword;
})();
方式2:Base64解码(简单解码)¶
(function(){
var encodedPassword = "编码后的密码";
var Base64 = Packages.java.util.Base64;
var decoder = Base64.getDecoder();
var decoded = new Packages.java.lang.String(decoder.decode(encodedPassword), "UTF-8");
return decoded;
})();
密码验证¶
方式1:验证密码是否正确¶
(function(){
var inputPassword = "用户输入的密码";
var storedPassword = "存储的加密密码";
// 加密用户输入的密码
var Security = new Packages.cn.myapps.common.util.Security();
var encryptedInput = Security.encryptPassword(inputPassword);
// 比较加密后的密码
if(encryptedInput === storedPassword){
return true;
}
return false;
})();
方式2:验证用户密码(通过用户对象)¶
(function(){
var userId = "用户ID";
var inputPassword = "用户输入的密码";
var user = getUserById(userId);
if(user != null){
var storedPassword = user.getPassword();
// 加密用户输入的密码
var Security = new Packages.cn.myapps.common.util.Security();
var encryptedInput = Security.encryptPassword(inputPassword);
// 比较密码
if(encryptedInput === storedPassword){
return "密码正确";
}else{
return "密码错误";
}
}
return "用户不存在";
})();
方式3:使用MD5验证密码¶
(function(){
var inputPassword = "用户输入的密码";
var storedHash = "存储的MD5哈希值";
// 计算输入密码的MD5
var MessageDigest = Packages.java.security.MessageDigest;
var md = MessageDigest.getInstance("MD5");
var bytes = md.digest(inputPassword.getBytes("UTF-8"));
var sb = new Packages.java.lang.StringBuilder();
for(var i = 0; i < bytes.length; i++){
var hex = Integer.toHexString(0xff & bytes[i]);
if(hex.length == 1){
sb.append('0');
}
sb.append(hex);
}
var inputHash = sb.toString();
if(inputHash.equalsIgnoreCase(storedHash)){
return true;
}
return false;
})();
扩展示例¶
示例1:更新用户密码¶
(function(){
var userId = "用户ID";
var newPassword = "新密码";
// 加密新密码
var Security = new Packages.cn.myapps.common.util.Security();
var encryptedPassword = Security.encryptPassword(newPassword);
// 更新用户密码
var sql = "UPDATE t_user SET password = '" + encryptedPassword + "' WHERE id = '" + userId + "'";
updateByDSName("数据源名称", sql);
return "密码更新成功";
})();
示例2:重置用户密码为默认密码¶
(function(){
var userId = "用户ID";
var defaultPassword = "123456"; // 默认密码
// 加密默认密码
var Security = new Packages.cn.myapps.common.util.Security();
var encryptedPassword = Security.encryptPassword(defaultPassword);
// 更新用户密码
var sql = "UPDATE t_user SET password = '" + encryptedPassword + "' WHERE id = '" + userId + "'";
updateByDSName("数据源名称", sql);
return "密码已重置为默认密码";
})();
示例3:批量重置多个用户密码¶
(function(){
var userIds = ["用户ID1", "用户ID2", "用户ID3"];
var defaultPassword = "123456";
// 加密默认密码
var Security = new Packages.cn.myapps.common.util.Security();
var encryptedPassword = Security.encryptPassword(defaultPassword);
var successCount = 0;
var failCount = 0;
for(var i = 0; i < userIds.length; i++){
try{
var sql = "UPDATE t_user SET password = '" + encryptedPassword + "' WHERE id = '" + userIds[i] + "'";
updateByDSName("数据源名称", sql);
successCount++;
}catch(e){
failCount++;
}
}
return "成功: " + successCount + ", 失败: " + failCount;
})();
示例4:密码强度验证¶
(function(){
var password = "用户输入的密码";
var errors = [];
// 检查密码长度
if(password == null || password.length < 8){
errors.push("密码长度至少8位");
}
// 检查是否包含数字
if(!password.matches(".*\\d.*")){
errors.push("密码必须包含数字");
}
// 检查是否包含字母
if(!password.matches(".*[a-zA-Z].*")){
errors.push("密码必须包含字母");
}
// 检查是否包含特殊字符
if(!password.matches(".*[!@#$%^&*()_+\\-=\\[\\]{};':\"\\\\|,.<>\\/?].*")){
errors.push("密码必须包含特殊字符");
}
if(errors.length > 0){
return errors.join("; ");
}
return "密码强度符合要求";
})();
示例5:生成随机密码¶
(function(){
var length = 12; // 密码长度
var chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*";
var random = new Packages.java.util.Random();
var password = new Packages.java.lang.StringBuilder();
for(var i = 0; i < length; i++){
var index = random.nextInt(chars.length);
password.append(chars.charAt(index));
}
return password.toString();
})();
示例6:密码加密并存储¶
(function(){
var userId = "用户ID";
var newPassword = "新密码";
// 加密密码
var Security = new Packages.cn.myapps.common.util.Security();
var encryptedPassword = Security.encryptPassword(newPassword);
// 获取用户对象并更新密码
var user = getUserById(userId);
if(user != null){
user.setPassword(encryptedPassword);
// 保存用户(假设有保存方法)
// userProcess.doUpdate(user);
return "密码更新成功";
}
return "用户不存在";
})();
示例7:比较两个密码是否相同¶
(function(){
var password1 = "密码1";
var password2 = "密码2";
// 加密两个密码
var Security = new Packages.cn.myapps.common.util.Security();
var encrypted1 = Security.encryptPassword(password1);
var encrypted2 = Security.encryptPassword(password2);
if(encrypted1 === encrypted2){
return "两个密码相同";
}else{
return "两个密码不同";
}
})();
示例8:密码加密工具函数¶
// 密码加密函数
function encryptPassword(password){
var Security = new Packages.cn.myapps.common.util.Security();
return Security.encryptPassword(password);
}
// 密码验证函数
function verifyPassword(inputPassword, storedPassword){
var Security = new Packages.cn.myapps.common.util.Security();
var encryptedInput = Security.encryptPassword(inputPassword);
return encryptedInput === storedPassword;
}
// 使用示例
(function(){
var password = "原始密码";
var encrypted = encryptPassword(password);
println("加密后的密码: " + encrypted);
var isValid = verifyPassword("原始密码", encrypted);
println("密码验证结果: " + isValid);
return encrypted;
})();
关键函数说明¶
Packages.cn.myapps.common.util.Security(): MyApps平台的加密工具类Security.encryptPassword(password): 加密密码Security.decryptPassword(encryptedPassword): 解密密码(如果支持)Packages.java.security.MessageDigest: Java消息摘要类,用于MD5、SHA等加密Packages.java.util.Base64: Base64编码解码工具getUserById(userId): 根据用户ID获取用户对象user.getPassword(): 获取用户密码(加密后的)user.setPassword(password): 设置用户密码
密码加密说明¶
加密方式¶
- 平台加密工具: 使用MyApps平台提供的Security工具类,这是推荐的方式
- MD5: 单向哈希算法,不可逆,常用于密码验证
- SHA-256: 更安全的哈希算法,不可逆
- Base64: 编码方式,不是加密,可以解码
密码存储¶
- 密码通常以加密后的形式存储在数据库中
- 验证时,将用户输入的密码加密后与存储的加密密码比较
- 不建议存储明文密码
注意事项¶
- ⚠️ 安全性: 密码加密是单向的,MD5和SHA等哈希算法无法解密
- ⚠️ 密码强度: 建议设置密码强度要求(长度、复杂度等)
- ⚠️ 加密方式: 使用平台提供的加密工具,确保加密方式一致
- ⚠️ 密码重置: 重置密码时需要加密后再存储
- ⚠️ 密码验证: 验证时加密用户输入的密码,然后与存储的加密密码比较
- ⚠️ SQL注入: 更新密码时注意防止SQL注入攻击
- MD5和SHA是单向哈希,无法解密,只能用于验证
- Base64是编码,不是加密,可以解码
- 建议使用平台提供的Security工具类进行密码加密
使用场景¶
- 用户注册时加密密码
- 用户登录时验证密码
- 用户修改密码
- 管理员重置用户密码
- 密码强度验证
- 批量密码重置
如需查看完整脚本代码,请访问源文档链接。