当前位置: 首页 > news >正文

雪花算法、md5加密

雪花算法生成ID是一个64位长整型(但是也可以通过优化简短位数)

组成部分:

时间戳

机器ID

序列号

用途:

分布式系统唯一ID生成:解决数据库自增ID在分布式环境下的唯一性问题、避免UUID的无序性和性能问题

有序性保障:

时间戳部分保证ID全局趋势递增(适合数据库索引优化)、同一结点生成的ID按时间严格递增

高并发场景

可以用来生成用户唯一id,在做聊天室这个项目时我的用户id就是用雪花算法来完成的

uuid也可以直接用雪花算法完成

以下是生成14位的id代码

public class PasswordGenerator {
    // 定义字符集(可根据需求调整)
    private static final String LOWERCASE = "abcdefghijklmnopqrstuvwxyz";
    private static final String UPPERCASE = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    private static final String NUMBERS = "0123456789";
    private static final String SPECIALS = "!@#$%^&*()-_=+[]{}|;:,.<>?";

    private static final SecureRandom RANDOM = new SecureRandom();
    private static final int PASSWORD_LENGTH = 8;

    // 禁止实例化
    private PasswordGenerator() {
    }

    public static String generateStrongPassword() {
        StringBuilder password = new StringBuilder(PASSWORD_LENGTH);

        // 确保包含每种字符类型至少一个
        password.append(randomChar(LOWERCASE));
        password.append(randomChar(UPPERCASE));
        password.append(randomChar(NUMBERS));
        password.append(randomChar(SPECIALS));

        // 填充剩余位置
        String allChars = LOWERCASE + UPPERCASE + NUMBERS + SPECIALS;
        for (int i = 4; i < PASSWORD_LENGTH; i++) {
            password.append(randomChar(allChars));
        }

        // 打乱字符顺序
        char[] chars = password.toString().toCharArray();
        for (int i = 0; i < chars.length; i++) {
            int randomIndex = RANDOM.nextInt(chars.length);
            char temp = chars[i];
            chars[i] = chars[randomIndex];
            chars[randomIndex] = temp;
        }

        return new String(chars);
    }

    private static char randomChar(String charSet) {
        return charSet.charAt(RANDOM.nextInt(charSet.length()));
    }
}

可直接调用generateStrongPassword()方法来生成id

MD5是一种广泛使用的哈希函数,由 Ron Rivest 在 1991 年设计。它的主要作用是将任意长度的数据转换为 ​​128位(16字节)固定长度的哈希值​

核心特性:固定长度输出、不可逆性、抗碰撞性、计算速度快

MD5 的唯一合理用途​​:非安全场景的快速数据校验(如非敏感文件校验)

将用户的密码存入数据库时需用到

相关文章:

  • 罗技K860键盘
  • 【MCP】VSCode Cline配置MongoDB连接
  • 新的“估值锚点”:慧通测控人形(协作)机器人多任务并行
  • Java 大视界 -- 基于 Java 的大数据分布式缓存技术在电商高并发场景下的性能优化(181)
  • 从攻防演练到AI防护:网络安全服务厂商F5的全方位安全策略
  • 文档控件DevExpress Office File API v24.2亮点:不再支持非Windows系统
  • 供应链管理-职业规划:数字化供应链管理专家 / 供应链管理商业模式专家 / 供应链管理方案专家
  • nginx正向代理https
  • Java 大厂面试题 -- JVM 深度剖析:解锁大厂 Offe 的核心密钥
  • 0基础 | 硬件 | LM386芯片
  • 前端面试核心知识点整理:从 JavaScript 到 Vue 全解析
  • Mythical Beings:第八季即将回归,探索新的神话传承
  • 2021-10-26 C++完美身材
  • 记录学习的第二十三天
  • debian12安装mysql5.7.42(deb)
  • SeeGround: See and Ground for Zero-Shot Open-Vocabulary 3D Visual Grounding
  • 第二章:SQL 进阶操作与多表查询
  • 基于springboot+vue的课程管理系统
  • vue专题1---vue中绑定的自定义事件对应的事件处理函数,如何在传递参数的同时接收事件对象 event
  • LLaMA-Factory 数据集成从入门到精通
  • 世纪佳缘网站开发公司/营销型高端网站建设
  • intellij idea做网站/网站策划报告
  • 文登市城乡建设局网站/电商软文范例100字
  • 装修公司的网站/营业推广的方式
  • 电子商务网站推广的界定/中国十大网络销售公司
  • 浏览器兼容测试网站/深圳百度开户