加密的简单介绍

来源:互联网 发布:js 清除cookie 编辑:程序博客网 时间:2024/05/16 05:40
编码解码,加密解密,摘要
1、 Base64
     用法
     Base64.encode(content.getBytes(), Base64.DEFAULT)     Base64.decode(content.getBytes(), Base64.DEFAULT)


     原理 通过ASCII 表和Base64 的表不断的 比对和切换
         1 把得到的byte 按六位 切出来
         2 把切出来的结果 传化成十进制
         3 然后去Base64 里面去查表
         4 得到的结果 从左到右拼接成字符串


2、UrlEncoder 和UrlDecoder


      用处:在客户端和服务端 传递中文字符和特殊字符的时候,为了防止乱码的情况 就要使用 UrlEncoder 和UrlDecoder


      用法:UrlEncoder.encode(); UrlDecoder.decode()


      原理:和Base64 同理,也是不断查表,不断切分


3、Aes 加密解密


     用处:用于把文件和字符串加密和解密 他需要设置密码 并且密码的长度 必须是16、24 、32 个字符


     用法  
                      //初始化密文                                 Cipher cipher = Cipher.getInstance("AES");                                 // 初始化密码                                 SecretKeySpec key = new SecretKeySpec(password.getBytes(),"AES");                                 // 确定是加密还是解密                                 cipher.init(Cipher.ENCRYPT_MODE,key);                                 // 加密                                 byte[] encodeBytes = cipher.doFinal(encodeString.getBytes());                                 //加密出来的结果必须经过Base64处理一下,然后才不会出现乱码的情况 ,才能正常的解密回去                                 byte[] encode = Base64.encode(encodeBytes, Base64.DEFAULT);                                 String encodeResult = new String(encode);                                 mTextViewResult.setText(encodeResult);






                                解密的过程 和加密的过程是相反的
                                需要注意到是,我们的结果是经过了Base64处理后的结果,所以在解密之前得通过Base64 解码回来




        注意: AES 的密码的长度要求是16 、24 、32 位 ,如果是其他的情况,那么就不能进行加密和解密




4、 Des 加密
                             //初始化密文                             Cipher cipher = Cipher.getInstance("DES");                             // 初始化密码  注意 密码的长度必须要求是8位 这个是和AES 的区别                             SecretKeySpec key = new SecretKeySpec(password.getBytes(),"DES");                             // 设置加密或者是解密的模式                             cipher.init(Cipher.ENCRYPT_MODE,key);                             //开始加密                             byte[] encodeBytes = cipher.doFinal(content.getBytes());                             // 为了防止出现加密出来byte数组出现乱码的情况,我们把得到byte数组 通过base64处理                             byte[] encode = Base64.encode(encodeBytes, Base64.DEFAULT);                             mTextViewResult.setText(new String(encode));




       解密
                               Cipher cipher = Cipher.getInstance("DES");                               SecretKeySpec keys = new SecretKeySpec(passwords.getBytes(),"DES");                               cipher.init(Cipher.DECRYPT_MODE,keys);                               // 因为我们加密的结果通过了Base64编码过,所以,当我们拿到加密后的结果的时候,我们应该把结果通过base64解密回来                               // 然后在进行解密                               byte[] resultBytes = cipher.doFinal(decodeBytes);                               mTextViewResult.setText(new String(resultBytes));




5、RSA 加密
            1. 在加密或者解密之前必要要有 公钥或者私钥 (这个公钥和私钥不是输入的,而是直接生成的)
                                         //初始化密文                                         Cipher cipher = Cipher.getInstance("RSA");                                          设置加密或者是解密的模式                                         cipher.init(Cipher.ENCRYPT_MODE,publicKey);                                         //开始加密                                         byte[] encodeBytes = cipher.doFinal(content.getBytes());                                         // 为了防止出现加密出来byte数组出现乱码的情况,我们把得到byte数组 通过base64处理                                         byte[] encode = Base64.encode(encodeBytes, Base64.DEFAULT);                                         mTextViewResult.setText(new String(encode));




            2. 在解密的时候 ,一般的情况 ,不会让你自己生成一个私钥或者公钥来进行加密解密,因为我们操作的客户端,
              一般情况下,都是服务端直接给我们一个字符串,让我们自己去生成一个 与服务器相对应的私钥或者公钥


               2.1 我们要通过字符串生成一个公钥或者私钥
                    // 通过获取的字符串(私钥的字符串)来生成 一个私钥                    byte[] keyBytes = Base64.decode(privateKeyStr.getBytes(), Base64.DEFAULT);                    // 通过字符数组 来生成 公钥或者私钥                     PKCS8EncodedKeySpec spec = new PKCS8EncodedKeySpec(keyBytes);                     KeyFactory factory = KeyFactory.getInstance("RSA");                     生成了私钥                     PrivateKey privateKey = factory.generatePrivate(spec);




            2.2 解密

                    // 先解码再解码                    byte[] decode = Base64.decode(encodeResult.getBytes(), Base64.DEFAULT);                    Cipher cipher = Cipher.getInstance("RSA");                    cipher.init(Cipher.DECRYPT_MODE,privateKey);                    byte[] doFinal = cipher.doFinal(decode);



1 0