<menu id="guoca"></menu>
<nav id="guoca"></nav><xmp id="guoca">
  • <xmp id="guoca">
  • <nav id="guoca"><code id="guoca"></code></nav>
  • <nav id="guoca"><code id="guoca"></code></nav>

    aes 加密算法 java


    發現錯別字 1年前 提問
    回答
    1
    瀏覽
    744
    請勿發布不友善或者負能量的內容。與人為善,比聰明更重要!
    回答數量: 1
    安全集成(專業級)SI/PL CISAW安全運維(專業級)

    java下aes加密算法流程如下:

    1. AES的加密流程首先AES加密會把明文按128位16個字節,切成一段一段的數據,如果數據的最后一段不夠16個字節,會用Padding來填充。

    2. 然后把明文塊0與初始向量IV做異或操作,再用密鑰加密,得到密文塊0,同時密文塊0也會被用作明文塊1的加密向量。

    3. 然后明文塊1與密文塊0進行異或操作,再用密鑰加密,得到密文塊1。當然這里只是假設數據只有兩段,如果數據不止兩段,依次類推,就可以得到很多段密文塊。

    4. 最后把密文塊拼接起來就能得到最終的密文。

    實例如下:

    import java.security.MessageDigest;
    
    import java.security.NoSuchAlgorithmException;
    
    import java.util.Arrays;
    
    import java.util.Base64;
    
    import javax.crypto.Cipher;
    
    import javax.crypto.spec.SecretKeySpec;
    
    public class AES {
    
        private static SecretKeySpec secretKey;
    
        private static byte[] key;
    
        public static void setKey(String myKey)
    
        {
    
            MessageDigest sha = null;
    
            try {
    
                key = myKey.getBytes("UTF-8");
    
                sha = MessageDigest.getInstance("SHA-1");
    
                key = sha.digest(key);
    
                key = Arrays.copyOf(key, 16);
    
                secretKey = new SecretKeySpec(key, "AES");
    
            }
    
            catch (NoSuchAlgorithmException e) {
    
                e.printStackTrace();
    
            }
    
            catch (UnsupportedEncodingException e) {
    
                e.printStackTrace();
    
            }
    
        }
    
    
        public static String encrypt(String strToEncrypt, String secret)
    
        {
    
            try
    
            {
    
                setKey(secret);
    
                Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
    
                cipher.init(Cipher.ENCRYPT_MODE, secretKey);
    
                return Base64.getEncoder().encodeToString(cipher.doFinal(strToEncrypt.getBytes("UTF-8")));
    
            }
    
            catch (Exception e)
    
            {
    
                System.out.println("Error while encrypting: " + e.toString());
    
            }
    
            return null;
    
        }
    
        public static String decrypt(String strToDecrypt, String secret)
    
        {
    
            try
    
            {
    
                setKey(secret);
    
                Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5PADDING");
    
                cipher.init(Cipher.DECRYPT_MODE, secretKey);
    
                return new String(cipher.doFinal(Base64.getDecoder().decode(strToDecrypt)));
    
            }
    
            catch (Exception e)
    
            {
    
                System.out.println("Error while decrypting: " + e.toString());
    
            }
    
            return null;
    
        }
    
    }

    回答所涉及的環境:聯想天逸510S、Windows 10。

    1年前 / 評論
    亚洲 欧美 自拍 唯美 另类