📓 Archive

CRYPTO

FGJ: Create:2024/01/30 Update: (2024-10-24)

  • Intro #

    常见的 对称加密 算法主要有 DES、3DES、 AES 等,常见的 非对称算法 主要有 RSA、DSA、ECC,散列算法 主要有 SHA-1、 MD5 等。 代码实现参考

  • Key #

    • 生成自定义key #

      使用ascii生成可以的方法如下:

      public static byte[] getRandomKey(){
          int len = 16; // 128 ->16  256->32
          byte[] keys = new byte[len];
          Random rdom = new Random();
          for (int i = 0; i < len; i++) {
              keys[i] = (byte) (rdom.nextInt(126-34) +34);
          }
          return keys;
      }
      // kZZ`MbMLbp5sc7Y'
      // U2yT4Q)2Ss+Li=Y)
      // "OAKJH5kKKLq?g'p
      // h&GKS.gAG,H_@et%
      // .]?]_8ECB[Z'gYn)
      // <mJ\J_PlLE][_uI9
      // 2j=HC,#Au}VDE\P:
      // 27Fqc/j6LODd<.8O
      // Gtt17Q\IyFrNtthk
      // 4q>?A{b|mo@kqM2Q
      

    • 使用SecretKeyFactory构造 #

      private static SecretKey getKey(String key) throws Exception {
          DESKeySpec dks = new DESKeySpec(key.getBytes("utf-8"));
          SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
          return keyFactory.generateSecret(dks);
      }
      // split .can direct use
      private static SecretKey getKey(byte[] key){
          return new SecretKeySpec(key, "AES");
      }
      
    • 使用KeyGenerator生成全新的 #

      public static byte[] getRandomKey() throws Exception {
          KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
          SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG", "SUN");
          secureRandom.setSeed(("AES/CBC/PKCS7Padding" + "EVERY-seed").getBytes());
          keyGenerator.init(256, secureRandom); //要生成多少位,只需要修改这里即可128, 192或256
          SecretKey originalKey = keyGenerator.generateKey();
          return originalKey.getEncoded(); // byte[32]
      }
      
    • Reference

  • Test #

    • DES #

      @Test
      public void testDES(){
      
          String key = "U2yT4Q)2Ss+Li=Y)";
          String iv  = "2j=HC,#Au}VDE\\P:";
          iv  = "2=H,#Au}"; //des 8 byte
          String data = "hello world from 加密";
      
          String encrypt = DES.encrypt(data, key.getBytes(), iv.getBytes());
          System.out.println(encrypt);
          String decrypt = DES.decrypt(encrypt, key.getBytes(), iv.getBytes());
          System.out.println(decrypt);
      
      }
      

    • AES #

      @Test
      public void testAES(){
          String key = "U2yT4Q)2Ss+Li=Y)";
          String iv  = "2j=HC,#Au}VDE\\P:";
          //iv  = "2=H,#Au}"; //des 8 byte
          String data = "hello world from 加密";
      
          String encrypt = AES.encrypt(data, key.getBytes(), iv.getBytes());
          System.out.println(encrypt);
          String decrypt = AES.decrypt(encrypt, key.getBytes(), iv.getBytes());
          System.out.println(decrypt);
      }
      

  • Reference #


comments powered by Disqus