精华内容
下载资源
问答
  • 2021-08-04 15:23:02

    初学数据库密码加密,看到这个md5算法,进行记录。

    import java.io.UnsupportedEncodingException;
    import java.security.MessageDigest;
    import java.security.NoSuchAlgorithmException;
    
    /**
     * 采用MD5加密解密
     *
     * @author tfq
     * @datetime 2011-10-13
     */
    public class MD5Test {
    
        /***
         * MD5加码 生成32位md5码
         */
        public static String string2MD5(String inStr) {
            MessageDigest md5 = null;
            try {
                md5 = MessageDigest.getInstance("MD5");
            } catch (Exception e) {
                System.out.println(e.toString());
                e.printStackTrace();
                return "";
            }
            char[] charArray = inStr.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++) {
                int val = ((int) md5Bytes[i]) & 0xff;
                if (val < 16)
                    hexValue.append("0");
                hexValue.append(Integer.toHexString(val));
            }
            return hexValue.toString();
    
        }
    
        /**
         * 加密解密算法 执行一次加密,两次解密
         */
        public static String convertMD5(String inStr) {
    
            char[] a = inStr.toCharArray();
            for (int i = 0; i < a.length; i++) {
                a[i] = (char) (a[i] ^ 't');
            }
            String s = new String(a);
            return s;
    
        }
    
        // 测试主函数
        public static void main(String args[]) {
            String s = new String("980523");
            System.out.println("原始:" + s);
            System.out.println("MD5后:" + string2MD5(s));
            System.out.println("加密的:" + convertMD5(s));
            System.out.println("解密的:" + convertMD5(convertMD5(s)));
    
        }
    }
    
    更多相关内容
  • 本文实例为大家分享了.net core使用MD5加密解密字符串的具体代码,供大家参考,具体内容如下 /// /// 加密 /// /// 要加密的文本 /// 秘钥 /// <returns></returns> public static string Encrypt(string ...
  • 虽然这些算法的结构或多或少有些相似,但MD2的设计与MD4和MD5完全不同,那是因为MD2是为8位机器做过设计优化的,而MD4和MD5却是面向32位的电脑。这三个算法的描述和C语言源代码在Internet RFCs 1321中有详细的描述,...
  • md5加密解密js文件

    2018-08-21 11:42:14
    用于md5加密解密,详细使用方法链接:https://blog.csdn.net/qq_35713752/article/details/81904958
  • java md5加密 解密

    2017-08-03 22:10:46
    java md5加密 解密
  • c#,.net md5加密解密技术
  • android用MD5加密解密简单demo
  • MD5加密解密

    2018-06-07 10:29:37
    java 采用MD5 进行加密解密完整代码,导入就可以直接使用,有完整的注释,轻松上手。
  • 主要介绍了c#多种加解密示例,包括了MD5加密,SHA1加密,DES加解密,需要的朋友可以参考下
  • MD5编码、MD5加密解密demo代码,详看博客 对字符串进行MD5编码及MD5加密和解密
  • md5加密解密js文件.zip

    2020-05-07 15:41:36
    运用js来使用md5加密解密库!运用js来使用md5加密解密库!运用js来使用md5加密解密库!运用js来使用md5加密解密库!
  • java实现md5 加密解密

    热门讨论 2013-08-20 09:58:44
    java实现md5 加密解密(在网络中MD5是著名的不可逆算法,但是如果知道MD5的加密的字符串 则可以通过自己的加密算法对明文进行加密,对加密后的密文与字符串匹配; 匹配成功,表示找到明文;但是此程序的时间耗费较高!仅...
  • MD5加密解密生成器

    2014-03-28 09:45:39
    提供MD5最新加密解密等功能 1.MD5加密 加密时请输入明文,软件会自动加密,点击密码后会自动辅助 2.MD5解密 Md5解密加密专家支持以下类型的解密: md5md5md5($pass))、md5md5md5($pass)))、MD5MD5...
  • 主要介绍了java中常用工具类之字符串操作类和MD5加密解密类,需要的朋友可以参考下
  • Md5加密解密

    2015-10-23 19:57:34
    Md5加密解密
  • 主要介绍了Java实现DES加密与解密,md5加密以及Java实现MD5加密解密类 ,需要的朋友可以参考下
  • 如果对安全性的需求不是太高,MD5仍是使用非常方便和普及的加密方式,比如Java中自带的MessageDigest类就提供了支持,这里就为大家带来Java实现MD5加密解密的代码实例分享:
  • C#md5加密解密

    2017-12-04 10:13:06
    C#编写的md5加密解密,含调用例子.有需要的朋友请下载使用
  • Java实现MD5加密解密

    热门讨论 2011-07-29 11:02:34
    Java实现MD5加密以及解密,附带测试类,具体见代码。 Java实现MD5加密以及解密,附带测试类,具体见代码。 Java实现MD5加密以及解密,附带测试类,具体见代码。 Java实现MD5加密以及解密,附带测试类,具体见代码。
  • MD5加密解密工具

    2017-11-22 16:35:45
    MD5加密解密工具,MD5加密解密工具,MD5加密解密工具,MD5加密解密工具
  • 微信小程序通用实现MD5,AES(EBC)加解密,已用于项目 AES加密 ECB模式 可无IV(16位)
  • JAVA实现MD5加密解密

    千次阅读 2021-02-12 10:33:18
    MD5加密解密类——MyMD5Util,代码如下:view plaincopy to clipboardprint?package com.zyg.security.md5;import java.io.UnsupportedEncodingException;import java.security.MessageDigest;impor...

    Java实现MD5加密以及解密类,附带测试类,具体见代码。

    MD5加密解密类——MyMD5Util,代码如下:

    view plaincopy to clipboardprint?

    package com.zyg.security.md5;

    import java.io.UnsupportedEncodingException;

    import java.security.MessageDigest;

    import java.security.NoSuchAlgorithmException;

    import java.security.SecureRandom;

    import java.util.Arrays;

    public class MyMD5Util {

    private static final String HEX_NUMS_STR="0123456789ABCDEF";

    private static final Integer SALT_LENGTH = 12;

    /**

    * 将16进制字符串转换成字节数组

    * @param hex

    * @return

    */

    public static byte[] hexStringToByte(String hex) {

    int len = (hex.length() / 2);

    byte[] result = new byte[len];

    char[] hexChars = hex.toCharArray();

    for (int i = 0; i < len; i++) {

    int pos = i * 2;

    result[i] = (byte) (HEX_NUMS_STR.indexOf(hexChars[pos]) << 4

    | HEX_NUMS_STR.indexOf(hexChars[pos + 1]));

    }

    return result;

    }

    /**

    * 将指定byte数组转换成16进制字符串

    * @param b

    * @return

    */

    public static String byteToHexString(byte[] b) {

    StringBuffer hexString = new StringBuffer();

    for (int i = 0; i < b.length; i++) {

    String hex = Integer.toHexString(b[i] & 0xFF);

    if (hex.length() == 1) {

    hex = '0' + hex;

    }

    hexString.append(hex.toUpperCase());

    }

    return hexString.toString();

    }

    /**

    * 验证口令是否合法

    * @param password

    * @param passwordInDb

    * @return

    * @throws NoSuchAlgorithmException

    * @throws UnsupportedEncodingException

    */

    public static boolean validPassword(String password, String passwordInDb)

    throws NoSuchAlgorithmException, UnsupportedEncodingException {

    //将16进制字符串格式口令转换成字节数组

    byte[] pwdInDb = hexStringToByte(passwordInDb);

    //声明盐变量

    byte[] salt = new byte[SALT_LENGTH];

    //将盐从数据库中保存的口令字节数组中提取出来

    System.arraycopy(pwdInDb, 0, salt, 0, SALT_LENGTH);

    //创建消息摘要对象

    MessageDigest md = MessageDigest.getInstance("MD5");

    //将盐数据传入消息摘要对象

    md.update(salt);

    //将口令的数据传给消息摘要对象

    md.update(password.getBytes("UTF-8"));

    //生成输入口令的消息摘要

    byte[] digest = md.digest();

    //声明一个保存数据库中口令消息摘要的变量

    byte[] digestInDb = new byte[pwdInDb.length - SALT_LENGTH];

    //取得数据库中口令的消息摘要

    System.arraycopy(pwdInDb, SALT_LENGTH, digestInDb, 0, digestInDb.length);

    //比较根据输入口令生成的消息摘要和数据库中消息摘要是否相同

    if (Arrays.equals(digest, digestInDb)) {

    //口令正确返回口令匹配消息

    return true;

    } else {

    //口令不正确返回口令不匹配消息

    return false;

    }

    }

    /**

    * 获得加密后的16进制形式口令

    * @param password

    * @return

    * @throws NoSuchAlgorithmException

    * @throws UnsupportedEncodingException

    */

    public static String getEncryptedPwd(String password)

    throws NoSuchAlgorithmException, UnsupportedEncodingException {

    //声明加密后的口令数组变量

    byte[] pwd = null;

    //随机数生成器

    SecureRandom random = new SecureRandom();

    //声明盐数组变量

    byte[] salt = new byte[SALT_LENGTH];

    //将随机数放入盐变量中

    random.nextBytes(salt);

    //声明消息摘要对象

    MessageDigest md = null;

    //创建消息摘要

    md = MessageDigest.getInstance("MD5");

    //将盐数据传入消息摘要对象

    md.update(salt);

    //将口令的数据传给消息摘要对象

    md.update(password.getBytes("UTF-8"));

    //获得消息摘要的字节数组

    byte[] digest = md.digest();

    //因为要在口令的字节数组中存放盐,所以加上盐的字节长度

    pwd = new byte[digest.length + SALT_LENGTH];

    //将盐的字节拷贝到生成的加密口令字节数组的前12个字节,以便在验证口令时取出盐

    System.arraycopy(salt, 0, pwd, 0, SALT_LENGTH);

    //将消息摘要拷贝到加密口令字节数组从第13个字节开始的字节

    System.arraycopy(digest, 0, pwd, SALT_LENGTH, digest.length);

    //将字节数组格式加密后的口令转化为16进制字符串格式的口令

    return byteToHexString(pwd);

    }

    }

    package com.zyg.security.md5;

    import java.io.UnsupportedEncodingException;

    import java.security.MessageDigest;

    import java.security.NoSuchAlgorithmException;

    import java.security.SecureRandom;

    import java.util.Arrays;

    public class MyMD5Util {

    private static final String HEX_NUMS_STR="0123456789ABCDEF";

    private static final Integer SALT_LENGTH = 12;

    /**

    * 将16进制字符串转换成字节数组

    * @param hex

    * @return

    */

    public static byte[] hexStringToByte(String hex) {

    int len = (hex.length() / 2);

    byte[] result = new byte[len];

    char[] hexChars = hex.toCharArray();

    for (int i = 0; i < len; i++) {

    int pos = i * 2;

    result[i] = (byte) (HEX_NUMS_STR.indexOf(hexChars[pos]) << 4

    | HEX_NUMS_STR.indexOf(hexChars[pos + 1]));

    }

    return result;

    }

    /**

    * 将指定byte数组转换成16进制字符串

    * @param b

    * @return

    */

    public static String byteToHexString(byte[] b) {

    StringBuffer hexString = new StringBuffer();

    for (int i = 0; i < b.length; i++) {

    String hex = Integer.toHexString(b[i] & 0xFF);

    if (hex.length() == 1) {

    hex = '0' + hex;

    }

    hexString.append(hex.toUpperCase());

    }

    return hexString.toString();

    }

    /**

    * 验证口令是否合法

    * @param password

    * @param passwordInDb

    * @return

    * @throws NoSuchAlgorithmException

    * @throws UnsupportedEncodingException

    */

    public static boolean validPassword(String password, String passwordInDb)

    throws NoSuchAlgorithmException, UnsupportedEncodingException {

    //将16进制字符串格式口令转换成字节数组

    byte[] pwdInDb = hexStringToByte(passwordInDb);

    //声明盐变量

    byte[] salt = new byte[SALT_LENGTH];

    //将盐从数据库中保存的口令字节数组中提取出来

    System.arraycopy(pwdInDb, 0, salt, 0, SALT_LENGTH);

    //创建消息摘要对象

    MessageDigest md = MessageDigest.getInstance("MD5");

    //将盐数据传入消息摘要对象

    md.update(salt);

    //将口令的数据传给消息摘要对象

    md.update(password.getBytes("UTF-8"));

    //生成输入口令的消息摘要

    byte[] digest = md.digest();

    //声明一个保存数据库中口令消息摘要的变量

    byte[] digestInDb = new byte[pwdInDb.length - SALT_LENGTH];

    //取得数据库中口令的消息摘要

    System.arraycopy(pwdInDb, SALT_LENGTH, digestInDb, 0, digestInDb.length);

    //比较根据输入口令生成的消息摘要和数据库中消息摘要是否相同

    if (Arrays.equals(digest, digestInDb)) {

    //口令正确返回口令匹配消息

    return true;

    } else {

    //口令不正确返回口令不匹配消息

    return false;

    }

    }

    /**

    * 获得加密后的16进制形式口令

    * @param password

    * @return

    * @throws NoSuchAlgorithmException

    * @throws UnsupportedEncodingException

    */

    public static String getEncryptedPwd(String password)

    throws NoSuchAlgorithmException, UnsupportedEncodingException {

    //声明加密后的口令数组变量

    byte[] pwd = null;

    //随机数生成器

    SecureRandom random = new SecureRandom();

    //声明盐数组变量

    byte[] salt = new byte[SALT_LENGTH];

    //将随机数放入盐变量中

    random.nextBytes(salt);

    //声明消息摘要对象

    MessageDigest md = null;

    //创建消息摘要

    md = MessageDigest.getInstance("MD5");

    //将盐数据传入消息摘要对象

    md.update(salt);

    //将口令的数据传给消息摘要对象

    md.update(password.getBytes("UTF-8"));

    //获得消息摘要的字节数组

    byte[] digest = md.digest();

    //因为要在口令的字节数组中存放盐,所以加上盐的字节长度

    pwd = new byte[digest.length + SALT_LENGTH];

    //将盐的字节拷贝到生成的加密口令字节数组的前12个字节,以便在验证口令时取出盐

    System.arraycopy(salt, 0, pwd, 0, SALT_LENGTH);

    //将消息摘要拷贝到加密口令字节数组从第13个字节开始的字节

    System.arraycopy(digest, 0, pwd, SALT_LENGTH, digest.length);

    //将字节数组格式加密后的口令转化为16进制字符串格式的口令

    return byteToHexString(pwd);

    }

    }

    测试类——Client,代码如下:

    view plaincopy to clipboardprint?

    package com.zyg.security.md5;

    import java.io.UnsupportedEncodingException;

    import java.security.NoSuchAlgorithmException;

    import java.util.HashMap;

    import java.util.Map;

    public class Client {

    private static Map users = new HashMap();

    public static void main(String[] args){

    String userName = "zyg";

    String password = "123";

    registerUser(userName,password);

    userName = "changong";

    password = "456";

    registerUser(userName,password);

    String loginUserId = "zyg";

    String pwd = "1232";

    try {

    if(loginValid(loginUserId,pwd)){

    System.out.println("欢迎登陆!!!");

    }else{

    System.out.println("口令错误,请重新输入!!!");

    }

    } catch (NoSuchAlgorithmException e) {

    // TODO Auto-generated catch block

    e.printStackTrace();

    } catch (UnsupportedEncodingException e) {

    // TODO Auto-generated catch block

    e.printStackTrace();

    }

    }

    /**

    * 注册用户

    *

    * @param userName

    * @param password

    */

    public static void registerUser(String userName,String password){

    String encryptedPwd = null;

    try {

    encryptedPwd = MyMD5Util.getEncryptedPwd(password);

    users.put(userName, encryptedPwd);

    } catch (NoSuchAlgorithmException e) {

    // TODO Auto-generated catch block

    e.printStackTrace();

    } catch (UnsupportedEncodingException e) {

    // TODO Auto-generated catch block

    e.printStackTrace();

    }

    }

    /**

    * 验证登陆

    *

    * @param userName

    * @param password

    * @return

    * @throws UnsupportedEncodingException

    * @throws NoSuchAlgorithmException

    */

    public static boolean loginValid(String userName,String password)

    throws NoSuchAlgorithmException, UnsupportedEncodingException{

    String pwdInDb = (String)users.get(userName);

    if(null!=pwdInDb){ // 该用户存在

    return MyMD5Util.validPassword(password, pwdInDb);

    }else{

    System.out.println("不存在该用户!!!");

    return false;

    }

    }

    }

    展开全文
  • java中常用的工具类,用于MD5加密,里面还有切割了MD5加密的长度,有DES加密解密,并且配有main函数可测试,可以根据自己的实际情况使用main函数测试使用
  • 环境要求:asp,mssql2005 程序语言:asp

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 68,946
精华内容 27,578
关键字:

md5加密解密