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

MD5加密解密

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

public static void main(String[] args) {
        //t1();
        /*t2();*/
        //t3();
        String s=new String("wanghuailou");
        System.out.println("原始:"+s);
        System.out.println("MD5后:"+t4(s));
        System.out.println("加密的:"+converMD5(s));
        System.out.println("解密的:"+converMD5(converMD5(s)));
    }
 /**
     * 加密解密算法 执行一次加密,两次解密
     * @param inStr
     * @return
     */
    public static String converMD5(String inStr){
        char[]a=inStr.toCharArray();
        for (int i=0;i<a.length;i++){
            // 数组a中下标为i的值按位异或字符t
            a[i]=(char)(a[i]^'t');
            System.out.print(a[i]+"+");
        }
        String s=new String(a);
        return s;
    }
/**
     * 采用MD5加密解密
     * @param t4
     * @return
     */
    public static String t4(String t4){
        /**
         * MD5加码,生成32md5码
         */
        MessageDigest md5=null;
        try{
            md5=MessageDigest.getInstance("MD5");
        }catch (Exception e){
            System.out.println(e.toString());
            e.printStackTrace();
            return "";
        }
        char[]charArray=t4.toCharArray();
        byte[]byteArray=new byte[charArray.length];
        for (int i=0;i<charArray.length;i++) {
            byteArray[i] = (byte) charArray[i];
        }
        //将摘要和密码结合
        byte[]md5Bytes=md5.digest(byteArray);
        //字符缓冲
        StringBuffer hexValue=new StringBuffer();
        //循环每一个字节
        for (int i=0;i<md5Bytes.length;i++){
            // byte类型的数字要&0xff再赋值给int类型,其本质原因就是想保持二进制补码的一致性
            int val=((int)md5Bytes[i])&0xff;
            //0x是16进制,ff是16 它的二进制是 1111 1111,把它变成16进制前面直接补位,加6*4个0
             if (val<16){
                 // 将不足16进制的地方补上0
                hexValue.append("0");
            }
            // 将16进制添加到字符缓冲
            hexValue.append(Integer.toHexString(val));
        }
        //将字符缓冲转换成字符串类型
        return hexValue.toString();
    }

转载于:https://my.oschina.net/u/3843989/blog/1825217

相关文章:

  • MS SQL 需要定期清理日志文件
  • Django-admin管理工具
  • Spring读书笔记-----部署我的第一个Spring项目
  • 减少死锁的几个常用方法
  • ylbtech-cnblogs(博客园)-数据库设计-7,News(新闻)
  • 用whistle和proxifier抓包调试任意客户端的网络请求
  • 一个C#文件传输模块,支持断点续传
  • linux 软硬链接
  • 单用户登陆限制(单点登录??)
  • 操作系统---进程 vs 线程
  • WPF使用第三方的字体(TTF文件)
  • RabbitMQ基础教程之基于配置的消费者实现
  • 上传文件过大的问题FileUploadBase$SizeLimitExceededException
  • 数据库index
  • What Is Cocoa?
  • centos安装java运行环境jdk+tomcat
  • exports和module.exports
  • in typeof instanceof ===这些运算符有什么作用
  • Javascript设计模式学习之Observer(观察者)模式
  • Java教程_软件开发基础
  • js如何打印object对象
  • k个最大的数及变种小结
  • vue-router 实现分析
  • 分享几个不错的工具
  • 聊聊redis的数据结构的应用
  • 前端知识点整理(待续)
  • 全栈开发——Linux
  • 突破自己的技术思维
  • 小程序01:wepy框架整合iview webapp UI
  • Linux权限管理(week1_day5)--技术流ken
  • TPG领衔财团投资轻奢珠宝品牌APM Monaco
  • ​渐进式Web应用PWA的未来
  • ​马来语翻译中文去哪比较好?
  • # 睡眠3秒_床上这样睡觉的人,睡眠质量多半不好
  • #DBA杂记1
  • #includecmath
  • (1)(1.8) MSP(MultiWii 串行协议)(4.1 版)
  • (20050108)又读《平凡的世界》
  • (2015)JS ES6 必知的十个 特性
  • (C#)获取字符编码的类
  • (LeetCode) T14. Longest Common Prefix
  • (pojstep1.1.1)poj 1298(直叙式模拟)
  • (分布式缓存)Redis哨兵
  • (附源码)springboot优课在线教学系统 毕业设计 081251
  • (一)appium-desktop定位元素原理
  • (一)ClickHouse 中的 `MaterializedMySQL` 数据库引擎的使用方法、设置、特性和限制。
  • .MSSQLSERVER 导入导出 命令集--堪称经典,值得借鉴!
  • .NET 8 编写 LiteDB vs SQLite 数据库 CRUD 接口性能测试(准备篇)
  • .NET Standard 支持的 .NET Framework 和 .NET Core
  • .NET 的程序集加载上下文
  • .Net 中Partitioner static与dynamic的性能对比
  • .NET/C# 判断某个类是否是泛型类型或泛型接口的子类型
  • .net开源工作流引擎ccflow表单数据返回值Pop分组模式和表格模式对比
  • @拔赤:Web前端开发十日谈
  • [Android Pro] android 混淆文件project.properties和proguard-project.txt