您的位置 首页 技术

java怎么加密

1、MD5(Message Digest Algorithm)加密算法 是一种单向加密算法,只能加密不能解密,示例 /** * MD5简单加密 * @param content 加…

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,散列消息鉴别码)

使用一个密钥生成一个固定大小的小数据块,即MAC,并将其加入到消息中,然后传输。接收方利用与发送方共享的密钥进行鉴别认证,示例

/**     * 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怎么加密的详细内容,更多请关注24课堂在线网其它相关文章!

本文来自网络,不代表24小时课堂在线立场,转载请注明出处:https://www.24ketang.cn/21011.html

为您推荐

返回顶部