【问题标题】:Rijndael or AES to match java encryption - with salt and keyRijndael 或 AES 匹配 java 加密 - 使用盐和密钥
【发布时间】:2012-06-29 10:29:08
【问题描述】:

我需要使用盐和密钥加密字符串以匹配 java 加密,以便第 3 方提供者可以解密另一端的值。

我已经尝试了几篇 StackOverflow 文章,因为我不是加密专家,只是无法使用 SALT 和 KEY 作为第三方提供商获得相同的加密字符串。

我需要知道在 C# 中使用哪种加密类型和模式来匹配这里使用的 java 的 AES 加密

https://gist.github.com/ca958d5921d47c4c0a0f

【问题讨论】:

    标签: c# java aes rijndael


    【解决方案1】:

    好的 - 我想通了,即使它在一定程度上作弊。因为我找不到任何与第 3 方提供的纯 AES 加密相匹配的加密技术,所以我要求他们将其更改为

    Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");

    有了这个,我修改了我的 C# 代码,终于让集成工作了:

    public static string Encrypt2(string plainText)
        {
            string PassPhrase = "somepassphrase";
            string SaltValue = "somesalt";
            int PasswordIterations = 0; //amend to match java encryption iteration
            string InitVector = "someiv";
            int KeySize = 0; //amend to match java encryption key size
    
            byte[] initVectorBytes = Encoding.ASCII.GetBytes(InitVector);
            byte[] saltValueBytes = Encoding.ASCII.GetBytes(SaltValue);
    
            byte[] plainTextBytes = Encoding.UTF8.GetBytes(plainText);
    
            Rfc2898DeriveBytes password = new Rfc2898DeriveBytes(
                                                            PassPhrase,
                                                            saltValueBytes,
                                                            PasswordIterations);
    
            byte[] keyBytes = password.GetBytes(KeySize / 8);
            RijndaelManaged symmetricKey = new RijndaelManaged();
            symmetricKey.Mode = CipherMode.CBC;
    
            ICryptoTransform encryptor = symmetricKey.CreateEncryptor(
                                                             keyBytes,
                                                             initVectorBytes);
            MemoryStream memoryStream = new MemoryStream();
    
            CryptoStream cryptoStream = new CryptoStream(memoryStream,
                                                         encryptor,
                                                         CryptoStreamMode.Write);
    
            cryptoStream.Write(plainTextBytes, 0, plainTextBytes.Length);
            cryptoStream.FlushFinalBlock();
            byte[] cipherTextBytes = memoryStream.ToArray();
    
            memoryStream.Close();
            cryptoStream.Close();
    
            string cipherText = Convert.ToBase64String(cipherTextBytes);
    
            return cipherText;
        }
    

    【讨论】:

      猜你喜欢
      • 2017-08-02
      • 2016-05-26
      • 2012-07-20
      • 1970-01-01
      • 2011-11-10
      • 1970-01-01
      • 1970-01-01
      • 2013-07-20
      • 1970-01-01
      相关资源
      最近更新 更多