比如说 我有一个String pwd="123"    想用MD5对他进行加密代码怎么写请详细说下原理

解决方案 »

  1.   

    import java.security.MessageDigest;
    import java.security.NoSuchAlgorithmException;public class MessageDigestUtil {
        
        public static void main(String[] args) {
            String txt = "123";
            byte[] bys = digest(txt.getBytes(), MessageDigestType.MD5);
            System.out.println(ByteUtil.bytes2Hex(bys));
        }    
        
        private static byte[] digest(byte[] bys, MessageDigestType type) {
            if(bys == null || bys.length == 0 || type == null) {
                throw new IllegalArgumentException("argument is invalid!");
            }
            MessageDigest m = null;
            try {
                m = MessageDigest.getInstance(type.getAlgorithms());
            } catch (NoSuchAlgorithmException e) {
            }
            m.update(bys);
            return m.digest();
        }   
    }class MessageDigestType {    private String algorithms;
        
        private MessageDigestType(String algorithms) {
            this.algorithms = algorithms;
        }
        
        public final static MessageDigestType MD2 = new MessageDigestType("MD2");
        public final static MessageDigestType MD5 = new MessageDigestType("MD5");
        public final static MessageDigestType SHA1 = new MessageDigestType("SHA-1");
        public final static MessageDigestType SHA256 = new MessageDigestType("SHA-256");
        public final static MessageDigestType SHA384 = new MessageDigestType("SHA-384");
        public final static MessageDigestType SHA512 = new MessageDigestType("SHA-512");
        
        public String getAlgorithms() {
            return algorithms;
        }
    }class ByteUtil {
        private final static char[] HEX = "0123456789abcdef".toCharArray();
        
        /**
         * 将字节数组转成 16 进制的字符串来表示,每个字节采用两个字符表表示
         * 
         * @param bys       需要转换成 16 进制的字节数组
         * @return
         */
        public static String bytes2Hex(byte[] bys) {
            char[] chs = new char[bys.length * 2];
            for(int i = 0, offset = 0; i < bys.length; i++) {
                chs[offset++] = HEX[bys[i] >> 4 & 0xf];
                chs[offset++] = HEX[bys[i] & 0xf];
            }
            return new String(chs);
        }
    }
      

  2.   

    就是楼上的,你百度一下,就可以找到MD5加密算法了,
    然后对要加密对象调用这个程序,返回的string就是加密后的数据了
    注意这个MD5不可逆,比较亮对象的话,都进行加密后比较就可以了