旗下导航:搜·么
当前位置:网站首页 > JAVA教程 > 正文

java怎样加密【JAVA教程】,java,加密

作者:搜教程发布时间:2019-12-06分类:JAVA教程浏览:30评论:0


导读:1、MD5(MessageDigestAlgorithm)加密算法是一种单向加密算法,只能加密不能解密,示例/***MD5简朴加密*...

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怎样加密的细致内容,更多请关注ki4网别的相干文章!

标签:java加密


欢迎 发表评论: