乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      在線AES加密源碼

       一本正經(jīng)地胡鬧 2019-09-04

      SecretKeySpec key = new SecretKeySpec(Arrays.copyOf(password.getBytes("utf-8"), 16), "AES");

         Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
         byte[] byteContent = content.getBytes("utf-8");
         cipher.init(Cipher.ENCRYPT_MODE, key);
         byte[] result = cipher.doFinal(byteContent);

         return result;

      用Base64處理字節(jié)數(shù)組,得到加密字符串


      CSDN很多加密代碼的key生成的很復(fù)雜,而且和在線加密不一樣,主要區(qū)別在于:

      1. SecretKeySpec key = new SecretKeySpec(encodeKey, "AES");

      2. SecretKeySpec key = new SecretKeySpec(password.getBytes()"AES");

      加密網(wǎng)站用的是第2個(gè),直接用key字符串的字節(jié)數(shù)組(一般取前16個(gè)字節(jié),可用Arrays.copyOf(bytes,16))。

      第1個(gè)是先給key進(jìn)行了一番加密操作,再把它的字節(jié)數(shù)組給SecretKeySpec

                  KeyGenerator kgen = KeyGenerator.getInstance("AES");

                  kgen.init(128, new SecureRandom(password.getBytes()));

                  SecretKey secretKey = kgen.generateKey();

                  byte[] encodeKey = secretKey.getEncoded();

                  SecretKeySpec key = new SecretKeySpec(encodeKey, "AES");


                  Cipher cipher = Cipher.getInstance("AES");//默認(rèn)ECB模式

                  byte[] byteContent = content.getBytes("utf-8");

                  cipher.init(Cipher.ENCRYPT_MODE, key);// 初始化

                  byte[] result = cipher.doFinal(byteContent);

          public static String AESDncode(String encodeRules,String content){

              try {

                  //1.構(gòu)造密鑰生成器,指定為AES算法,不區(qū)分大小寫

                  KeyGenerator keygen=KeyGenerator.getInstance("AES");

                  //2.根據(jù)ecnodeRules規(guī)則初始化密鑰生成器

                  //生成一個(gè)128位的隨機(jī)源,根據(jù)傳入的字節(jié)數(shù)組

                  keygen.init(128, new SecureRandom(encodeRules.getBytes()));

                    //3.產(chǎn)生原始對(duì)稱密鑰

                  SecretKey original_key=keygen.generateKey();

                    //4.獲得原始對(duì)稱密鑰的字節(jié)數(shù)組

                  byte [] raw=original_key.getEncoded();

                  //5.根據(jù)字節(jié)數(shù)組生成AES密鑰

                  SecretKey key=new SecretKeySpec(raw, "AES");

                    //6.根據(jù)指定算法AES自成密碼器

                  Cipher cipher=Cipher.getInstance("AES");

                    //7.初始化密碼器,第一個(gè)參數(shù)為加密(Encrypt_mode)或者解密(Decrypt_mode)操作,第二個(gè)參數(shù)為使用的KEY

                  cipher.init(Cipher.DECRYPT_MODE, key);

                  //8.將加密并編碼后的內(nèi)容解碼成字節(jié)數(shù)組

                  byte [] byte_content= new BASE64Decoder().decodeBuffer(content);

                  /*

                   * 解密

                   */

                  byte [] byte_decode=cipher.doFinal(byte_content);

                  String AES_decode=new String(byte_decode,"utf-8");

                  return AES_decode;

              } catch (NoSuchAlgorithmException e) {

                  e.printStackTrace();

              } catch (NoSuchPaddingException e) {

                  e.printStackTrace();

              } catch (InvalidKeyException e) {

                  e.printStackTrace();

              } catch (IOException e) {

                  e.printStackTrace();

              } catch (IllegalBlockSizeException e) {

                  e.printStackTrace();

              } catch (BadPaddingException e) {

                  e.printStackTrace();

              }

              //如果有錯(cuò)就返加nulll

              return null;         

          }


      password就是秘鑰,有的用key,有的用encodeRules

      網(wǎng)站只是截取我們字符串字節(jié)的前16位字節(jié)數(shù)組作為秘鑰進(jìn)行加密


      128位密鑰,用jdk自帶庫(kù)實(shí)現(xiàn)

      [參考1](https://blog.csdn.net/u013871100/article/details/80100992)

      [參考2](https://blog.csdn.net/qq_18870023/article/details/52183755)

      AES涉及幾個(gè)參數(shù):加密模式、補(bǔ)碼方式、偏移量

      經(jīng)驗(yàn)證jdk默認(rèn)的是ECB模式,并不是參考中所說的CBC

      因?yàn)椋珽CB模式是不需要偏移的,默認(rèn)情況下插入偏移,從jdk報(bào)錯(cuò)信息提示來看,默認(rèn)確定是ECB

      代碼在下,加密和解密都沒問題。可是加密結(jié)果和在線加密工具出的結(jié)果不一致

      很費(fèi)解為什么不一致,參數(shù)設(shè)置都已經(jīng)一樣了,只能先這樣了

      CBC需要IV,即秘鑰偏移量

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多