簡體   English   中英

C#中的對稱加密類似於JAVA

[英]symmetric encryption in c# resembles JAVA

private static byte[] encryptData(ByteArrayOutputStream data, byte[] symmetricKey) throws EncryptionException {
        try {
            SecretKey secKey = new SecretKeySpec(symmetricKey, "AES");
            Cipher cipher = Cipher.getInstance("AES");
            cipher.init(Cipher.ENCRYPT_MODE, secKey);
            return cipher.doFinal(data.toByteArray());
        } catch (NoSuchAlgorithmException | NoSuchPaddingException | IllegalBlockSizeException |
                InvalidKeyException |
                BadPaddingException e) {
            throw new EncryptionException(e);
        }
    }

我遇到需要使用.NET加密數據並使用JAVA解密相同數據的情況。 本質上,我需要在.NET中重寫上述加密方法。

public byte[] Encrypt(byte[] key, byte[] plainText)
        {
            using (AesCryptoServiceProvider aesProvider = new AesCryptoServiceProvider())
            {
                using (ICryptoTransform encryptor = aesProvider.CreateEncryptor(key, magicIV))
                {
                    using (MemoryStream ms = new MemoryStream())
                    {
                        using (CryptoStream cs = new CryptoStream(ms, encryptor, CryptoStreamMode.Write))
                        {
                            cs.Write(plainText, 0, plainText.Length);
                        }
                        byte[] cipherText = ms.ToArray();
                        return cipherText;
                    }
                }
            }
        }

我在某處使用的上述代碼強制執行JAVA不需要的IV。 JAVA代碼中使用的IV是什么?

我嘗試了許多無效的鏈接。 .NET和Java之間的對稱加密

請幫忙

如果您當前的Java解密代碼也沒有要求IV(並且您的解密返回了您加密的相同數據),則Cipher.getInstance("AES")將使用ECB塊模式返回一個對象。

.NET對稱算法默認為CBC塊模式,這需要IV。

您有兩種選擇:

  • 在調用CreateEncryptor之前,設置aesProvider.Mode = CipherMode.ECB
  • aesProvider.IV傳遞給CreateEncryptor的IV參數。 如果未設置IV屬性,則在第一次讀取時將使其成為密碼隨機值。
    • 您將需要將此數據傳遞給解密例程,然后該解密例程應使用“ AES / CBC / PKCS5Padding”並設置IV,但是用Java可以做到這一點。
    • 一種常見的傳輸方法是將數據簡單地放在密文之前,然后在解密時選擇前16個字節。
    • 不要對IV使用固定值,因為它與ECB幾乎相同。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM