美文网首页
常见的加解密算法

常见的加解密算法

作者: 深爱蒲公英的纯美 | 来源:发表于2019-03-11 17:06 被阅读0次

开门见山,先说主题,这篇文章讲的是java中的加密解密一些常用的算法。
首先介绍base64算法,base64算法的加解密算法都是公开的,所以只能糊弄一般的群众,对稍微懂一点互联网以及代码知识的人基本无用,不说了,上代码:

       String text = "123456"; //需要加密的数据
        //base64加密解密
        //1.加密
        Base64.Encoder encoder = Base64.getEncoder();
        byte[] encode = encoder.encode(text.getBytes());
        System.out.println(new String(encode)); //加密后的密文是:MTIzNDU2,成功加密
        //2.解密
        Base64.Decoder decoder = Base64.getDecoder();
        byte[] decode = decoder.decode(encode);
        System.out.println(new String(decode)); //解密后是:123456,成功解密

2.DES对称加密算法。
DES加密最重要的是有一个暗号,也就是密钥,这个密钥要求至少是8位的字符,只要密钥不泄露,那么加密就没问题。上代码:

        String text = "123456";
        String key = "哈哈哈哈哈哈哈哈哈哈";
        //1.生成密钥
        DESKeySpec desKeySpec = new DESKeySpec(key.getBytes());
        SecretKeyFactory desKeyFactory = SecretKeyFactory.getInstance("des");
        SecretKey secretKey = desKeyFactory.generateSecret(desKeySpec);
        //2.密钥上面已经生成,现在进行加密
        Cipher cipher = Cipher.getInstance("des");
        cipher.init(Cipher.ENCRYPT_MODE,secretKey,new SecureRandom());//密钥在这里应用了
        byte[] encryptData = cipher.doFinal(text.getBytes());
        System.out.println(new String(encryptData));//打印的数据是:�b:���,成功加密
        //3.为了便于观察加密数据,再使用base64转换密文
        Base64.Encoder encoder = Base64.getEncoder();
        byte[] encode = encoder.encode(encryptData);
        System.out.println(new String(encode));//打印的数据是:gQ33YjqHy+I=  (这样的数据就好看多了)
        //4.des解密
        cipher.init(Cipher.DECRYPT_MODE,secretKey,new SecureRandom());//解密的时候这里再次用到了加密时候的secretKey
        byte[] decodeData = cipher.doFinal(encryptData);
        System.out.println(new String(decodeData));//打印的解密数据是:123456,成功解密

3.MD5加密算法
md5加密算法是一种单向加密算法,只能加密,无法解密。这种不可逆加密算法可以用于验证数据的完整性或用于登陆密码这样的功能。

    String text = "123456"; //需要解密的数据
        //1.创建md5加密对象
        MessageDigest md5 = MessageDigest.getInstance("md5");
        //2.进行加密操作
        byte[] digest = md5.digest(text.getBytes());
        //3.转化为十六进制的字符串
        StringBuilder stringBuilder = new StringBuilder();
        for (byte data: digest) {
            String s = Integer.toHexString(data & 0xff); //byte类型的数据最高位是符号位,通过和0xff进行与操作,转换为int类型的正整数。 
            stringBuilder.append(s.length() == 1 ? "0" + s : s);// 如果该正数小于16(长度为1个字符),前面拼接0占位:确保最后生成的是32位字符串。 
        }
        System.out.println(stringBuilder.toString()); //打印结果e10adc3949ba59abbe56e057f20f883e,成功加密

4.RSA非对称加密算法。
RSA非堆成加密是指用于加密的密钥是一对,一个叫做公钥,一个叫做私钥,这两个密钥是不一样的,但是它们任何一方加密,对方都会解密。一般服务器用私钥进行加密,客户端用公钥进行解密。当然客户端也可以用公钥加密,服务器用私钥解密。

//RSA加密
        String text = "123456"; //需要解密的数据
        //1.创建密钥对KeyPair
        KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("rsa");
        keyPairGenerator.initialize(1024);//密钥长度是1024
        KeyPair keyPair = keyPairGenerator.generateKeyPair();
        //2.获取公钥和私钥
        PublicKey publicKey = keyPair.getPublic();
        PrivateKey privateKey = keyPair.getPrivate();
        //3.用私钥加密数据
        Cipher cipher = Cipher.getInstance("rsa");
        cipher.init(Cipher.ENCRYPT_MODE,privateKey,new SecureRandom());
        byte[] cipherData = cipher.doFinal(text.getBytes());
        System.out.println(new String(cipherData));//打印密文: ���i�,�2���WC1��b�m�S���&�����5�����WFB�����HJ��HN��]�;Pq�A������}G�
        //4.使用公钥解密
        cipher.init(Cipher.DECRYPT_MODE,publicKey,new SecureRandom());
        byte[] decodeData = cipher.doFinal(cipherData);
        System.out.println(new String(decodeData)); //解密数据:123456,解密成功
        //5.通过私钥和密文对传输的数据生成数字签名
        Signature signature = Signature.getInstance("MD5withRSA");
        signature.initSign(privateKey);
        signature.update(cipherData);
        byte[] sign = signature.sign();
        System.out.println(new String(sign));//打印签名:���k��T��%�ȣ86o�ک!�W�7���
        //6.根据公钥和密文验证数据是否被修改过
        signature.initVerify(publicKey);
        signature.update(cipherData);
        boolean verify = signature.verify(sign);
        System.out.println(verify); //打印结果,验证结果:true
        
        //注意,我们发现RSA加密后的数据也是可读性很差,所以,我们可以用base64转换数据之后再传输

相关文章

  • iOS 常用加密与签名方式

    常见的加密算法可以分成三类,对称加密算法,非对称加密算法和单向加密算法。对称加密算法(加解密密钥相同)常见的有:D...

  • 常见的加解密算法

    开门见山,先说主题,这篇文章讲的是java中的加密解密一些常用的算法。首先介绍base64算法,base64算法的...

  • 1. 常用的加密算法

    常用的加解密算法分三大类:非对称密钥加密算法、对称密钥加密算法、Hash加密算法 非对称密钥加密算法常见算法:RS...

  • 区块链之加解密算法

    常用的加解密算法  常用的加解密算法有三类:对称加密算法、非对称加密算法以及hash加密算法。 在比特币中用到了非...

  • 区块链——加密算法精解

    算法体系 现代加密算法的典型组建包括:加解密算法、加密密钥、解密密钥。其中,加解密算法自身是固定不变的,一般是公开...

  • 微信小程序AES/CBC/PKCS7Padding解密encry

    // 算法名publicstaticfinalString KEY_NAME ="AES";// 加解密算法/模式...

  • 加解密详解

    本文主要介绍移动端的加解密算法的分类、其优缺点特性及应用,帮助读者由浅入深地了解和选择加解密算法。文中会包含算法的...

  • ios 加密

    1、常见加密算法 : 对称加密:AES、DES、3DES、RC4 优点:加解密速度快 没有长度限制 缺点:密钥容易...

  • 常用密码算法

    概论 在平时的开发过程中,我们基本上会使用到对称加解密算法,非对称加解密算法以及摘要算法。虽然有很多轮子可供开发者...

  • 兄弟连区块链教程区块链信息安全3椭圆曲线加解密及签名算法的技术原

    兄弟连区块链教程区块链信息安全3椭圆曲线加解密及签名算法的技术原理二。 # 椭圆曲线加解密及签名算法的技术原理及其...

网友评论

      本文标题:常见的加解密算法

      本文链接:https://www.haomeiwen.com/subject/wwrbpqtx.html