📓 Archive

  • Pricing
  • Chess
  • Syntax
  • 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