java怎么加密

互联网 19-12-5

1、MD5(Message Digest Algorithm)加密算法

是一种单向加密算法,只能加密不能解密,示例

/**      * MD5简单加密      * @param content 加密内容      * @return String      */     public static String md5Encrypt(final String content) {          MessageDigest md5 = null;         try {             md5 = MessageDigest.getInstance(ALGORITHM_MD5);         } catch (NoSuchAlgorithmException e) {             e.printStackTrace();         } //        md5.update(text.getBytes());         //digest()最后返回md5 hash值,返回值为8位字符串。因为md5 hash值是16位的hex值,实际上就是8位的字符         //BigInteger函数则将8位的字符串转换成16位hex值,用字符串来表示;得到字符串形式的hash值         BigInteger digest = new BigInteger(md5.digest(content.getBytes()));         //32位         return digest.toString(16);     }

2、BASE64进行加密/解密

通常用作对二进制数据进行加密,示例

/**      * base64加密      * @param content 待加密内容      * @return byte[]      */     public static byte[] base64Encrypt(final String content) {         return Base64.getEncoder().encode(content.getBytes());     }      /**      * base64解密      * @param encoderContent 已加密内容      * @return byte[]      */     public static byte[] base64Decrypt(final byte[] encoderContent) {         return Base64.getDecoder().decode(encoderContent);     }

3、DES(Data Encryption Standard)对称加密/解密

数据加密标准算法,和BASE64最明显的区别就是有一个工作密钥,该密钥既用于加密、也用于解密,并且要求密钥是一个长度至少大于8位的字符串,示例

/**      * DES加密      * @param key 秘钥key      * @param content 待加密内容      * @return byte[]      */     public static byte[] DESEncrypt(final String key, final String content) {         return processCipher(content.getBytes(), getSecretKey(key), Cipher.ENCRYPT_MODE , ALGORITHM_DES);     }      /**      * DES解密      * @param key 秘钥key      * @param encoderContent 已加密内容      * @return byte[]      */     public static byte[] DESDecrypt(final String key, final byte[] encoderContent) {         return processCipher(encoderContent, getSecretKey(key), Cipher.DECRYPT_MODE, ALGORITHM_DES);     }

4、RSA非对称加密/解密

非对称加密算法的典型代表,既能加密、又能解密。和对称加密算法比如DES的明显区别在于用于加密、解密的密钥是不同的。使用RSA算法,只要密钥足够长(一般要求1024bit),加密的信息是不能被破解的。示例

/**      * RSA加密      * @param content 待加密内容      * @return byte[]      */     public static byte[] RSAEncrypt(final String content) {         return processCipher(content.getBytes(), keyPair.getPrivate(), Cipher.ENCRYPT_MODE , ALGORITHM_RSA);     }      /**      * RSA解密      * @param encoderContent 已加密内容      * @return byte[]      */     public static byte[] RSADecrypt(final byte[] encoderContent) {         return processCipher(encoderContent, keyPair.getPublic(), Cipher.DECRYPT_MODE, ALGORITHM_RSA);     }

5、SHA(Secure Hash Algorithm,安全散列算法)

数字签名等密码学应用中重要的工具,被广泛地应用于电子商务等信息安全领域,示例

/**      * SHA加密      * @param content 待加密内容      * @return String      */     public static String SHAEncrypt(final String content) {         try {             MessageDigest sha = MessageDigest.getInstance(ALGORITHM_SHA);             byte[] sha_byte = sha.digest(content.getBytes());             StringBuffer hexValue = new StringBuffer();             for (byte b : sha_byte) {                 //将其中的每个字节转成十六进制字符串:byte类型的数据最高位是符号位,通过和0xff进行与操作,转换为int类型的正整数。                 String toHexString = Integer.toHexString(b & 0xff);                 hexValue.append(toHexString.length() == 1 ? "0" + toHexString : toHexString);             }             return hexValue.toString();  //            StringBuffer hexValue2 = new StringBuffer(); //            for (int i = 0; i < sha_byte.length; i++) { //                int val = ((int) sha_byte[i]) & 0xff; //                if (val < 16) { //                    hexValue2.append("0"); //                } //                hexValue2.append(Integer.toHexString(val)); //            } //            return hexValue2.toString();         } catch (Exception e) {             e.printStackTrace();         }        return "";     }

6、HMAC(Hash Message Authentication Code,散列消息鉴别码)

/**      * HMAC加密      * @param key 给定秘钥key      * @param content 待加密内容      * @return String      */     public static byte[] HMACEncrypt(final String key, final String content) {         try {             SecretKey secretKey = new SecretKeySpec(key.getBytes(), ALGORITHM_MAC);             Mac mac = Mac.getInstance(secretKey.getAlgorithm());             //初始化mac             mac.init(secretKey);             return mac.doFinal(content.getBytes());         } catch (Exception e) {             e.printStackTrace();         }         return null;     }

测试代码:

public static void main(String[] args) {         //md5简单加密         String text = "i am text";         System.out.println(EnDecoderUtil.md5Encrypt(text));          //base64进行加密解密,通常用作对二进制数据进行加密         byte[] base64Encrypt = EnDecoderUtil.base64Encrypt("123456789");         String toHexString = HexUtils.toHexString(base64Encrypt);         System.out.println(toHexString);         byte[] base64Decrypt = EnDecoderUtil.base64Decrypt(base64Encrypt);         System.out.println(new String(base64Decrypt));          //DES对称加密/解密         //要求key至少长度为8个字符         String key = "123456789";         //加密         byte[] encode_bytes = EnDecoderUtil.DESEncrypt(key, "Hello, DES");         System.out.println(Base64.getEncoder().encodeToString(encode_bytes));         //解密         byte[] decode_bytes = EnDecoderUtil.DESDecrypt(key, encode_bytes);         System.out.println(new String(decode_bytes));          //RSA         //数据使用私钥加密         byte[] en_byte = EnDecoderUtil.RSAEncrypt("Hi, RSA");         System.out.println(Base64.getEncoder().encodeToString(en_byte));          //用户使用公钥解密         byte[] de_byte = EnDecoderUtil.RSADecrypt(en_byte);         System.out.println(new String(de_byte));          //服务器根据私钥和加密数据生成数字签名         byte[] sign_byte = EnDecoderUtil.getSignature(en_byte);         System.out.println(Base64.getEncoder().encodeToString(sign_byte));          //用户根据公钥、加密数据验证数据是否被修改过         boolean verify_result = EnDecoderUtil.verifySignature(en_byte, sign_byte);         System.out.println(verify_result);          //SHA         String sha = EnDecoderUtil.SHAEncrypt("Hi, RSA");         System.out.println(sha);          //HMAC         byte[] mac_bytes = EnDecoderUtil.HMACEncrypt(key, "Hi, HMAC");         System.out.println(HexUtils.toHexString(mac_bytes));     }

更多java知识请关注java基础教程栏目。

以上就是java怎么加密的详细内容,更多内容请关注技术你好其它相关文章!

来源链接:
免责声明:
1.资讯内容不构成投资建议,投资者应独立决策并自行承担风险
2.本文版权归属原作所有,仅代表作者本人观点,不代表本站的观点或立场
标签: 加密
上一篇:php获取远程图片并下载保存到本地的方法分析 下一篇:java读取文件是否存在的方法

相关资讯