问答详情
源自:1-1 JAVA-对称加密算法DES

如何使用java将你的名字用一个加密方式后输出

如何使用java将你的名字用一个加密方式后输出

提问者:失败又能怎样 2017-03-14 16:06

个回答

  • 略有些霸气
    2017-03-18 10:54:19

    public class KkltHmac {
       public static final String src = "hmac test";
       public static void main(String[] args) {
           jdkHmacMD5();
           bcHmacMD5();
       }
       public static void jdkHmacMD5(){
           KeyGenerator hmacMD5 = null;
           try
           {
               // 初始化KeyGenerator
               KeyGenerator keyGenerator = KeyGenerator.getInstance("HmacMD5");
               // 产生密钥
               SecretKey secretKey = keyGenerator.generateKey();
               // 获取密钥
    //       byte[] key = secretKey.getEncoded();
               byte[] key = Hex.decodeHex(new char[]{'1','2','3','4','5','6','7','8','9','a','b','c','d','e' });

               // 还原密钥
               SecretKey restoreSecretKey = new SecretKeySpec(key, "HmacMD5");
               // 实例化MAC
               Mac mac = Mac.getInstance(restoreSecretKey.getAlgorithm());
               // 初始化MAC
               mac.init(restoreSecretKey);
               // 执行摘要
               byte[] hmacMD5Bytes = mac.doFinal(src.getBytes());
               System.out.println("jdk hmacMD5:" + Hex.encodeHexString(hmacMD5Bytes));

           } catch (Exception e) {
               e.printStackTrace();
           }
       }
       // 用bouncy castle实现:
       public static void bcHmacMD5()
       {
           HMac hmac = new HMac(new MD5Digest());
           // 必须是16进制的字符,长度必须是2的倍数
           hmac.init(new KeyParameter(org.bouncycastle.util.encoders.Hex.decode("123456789abcde")));
           hmac.update(src.getBytes(), 0, src.getBytes().length);

           // 执行摘要
           byte[] hmacMD5Bytes = new byte[hmac.getMacSize()];
           hmac.doFinal(hmacMD5Bytes, 0);
           System.out.println("bc hmacMD5:" + org.bouncycastle.util.encoders.Hex.toHexString(hmacMD5Bytes));

       }
    }

    把src改成你的名字即可