从C#解密AES,从Java加密 - c#

我们正在使用以下代码在Java中进行加密

public encrypt(String text) throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, InvalidKeySpecException {
    SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1");
    KeySpec spec = new PBEKeySpec(passPhrase.toCharArray(), SALT, ITERATION_COUNT, KEY_LENGTH); //256 bit
    SecretKey tmp = factory.generateSecret(spec);
    SecretKey secret = new SecretKeySpec(tmp.getEncoded(), "AES");
    this.ecipher = Cipher.getInstance("AES");
    this.ecipher.init(Cipher.ENCRYPT_MODE, secret);
    byte[] bytes = encrypt.getBytes("UTF-8");
    byte[] encrypted = this.ecipher.doFinal(bytes);
    return Base64.encodeBase64String(encrypted);
}

我们的供应商正在使用C#解密数据
他的密码

string Decrypt(string textToDecrypt, string key)
{
    RijndaelManaged rijndaelCipher = new RijndaelManaged();
    rijndaelCipher.Mode = CipherMode.ECB;
    rijndaelCipher.KeySize = 0x80;
    rijndaelCipher.BlockSize = 0x80;
    byte[] encryptedData = Convert.FromBase64String(textToDecrypt);
    byte[] pwdBytes = Encoding.UTF8.GetBytes(key);
    byte[] keyBytes = new byte[0x10];
    int len = pwdBytes.Length;
    if (len > keyBytes.Length) {
        len = keyBytes.Length;
    }
    Array.Copy(pwdBytes, keyBytes, len);
    rijndaelCipher.Key = keyBytes;
    byte[] plainText = rijndaelCipher.CreateDecryptor().TransformFinalBlock(encryptedData, 0, encryptedData.Length);
    return Encoding.UTF8.GetString(plainText); 
}

但是他无法解密数据。他正在获取一些垃圾数据。
任何想法如何使用C#for Java Encryption解密。

参考方案

首先,您的Java代码没有任何安全隐喻。 ECB模式不是一个好的选择。

其次,C#代码的问题是它使用密钥的通过阶段的原始字节,而不是Java代码使用的PBKDF2WithHmacSHA1。 C#中用于生成密钥的类是Rfc2898DeriveBytes

从C#背景学习Java - c#

                    由于复杂的原因(不是C#的错,我非常喜欢该语言),我必须学习Java。我讨厌学习新的语言,而且我也不想学习我已经从C#了解的知识。有哪些资源可以在不学习所有内容的情况下教授不同之处? 参考方案 我意识到这不是一个非常具体的答案,但是我能给您的最好建议是不要以“我讨厌学习新语言”的心态来研究它。如果您熟悉C#,Java将…

从C#读取protobuf3自定义选项 - c#

TL; DR根据文档,如果我使用C ++,则可以使用string value = MyMessage::descriptor()->options().GetExtension(my_option);读取自定义选项的值。 Java和Python也有类似的示例。但是我在做C#,我可以找到一个等效的东西。我可以这样做吗,如果可以,怎么办?更多细节我正在操纵…

从C#分配一个JavaScript变量 - c#

我有一些JavaScript,例如:<script type="text/javascript"> flashvars.myval = "blah"; //get this from c# ..etc </script> 我需要从C#中分配变量我怎样才能做到这一点?我可以调用C#方法吗?即时通讯…

从C#将Excel工作表保存为共享的不受保护的只读模式 - c#

我正在保存使用Workbook.SaveAs方法在C#中创建的工作表。 XlSaveAsAccessMode参数给了我一些问题。xlShared将工作表保存在保护模式下,因此用户无法随意使用图表并仔细检查它们。它基本上显示为无法参考数据的死图。xlExclusive允许用户保存图书的不受保护的访问权限,但不允许其他人访问。其他用户仍然看到无效的图表。我需要将…

Java:正则表达式模式匹配器是否有大小限制? - java

我的模式类似于OR:“word1 | word2 | word3”我大约有800个字。可能有问题吗? 参考方案 您仅受记忆和理智的限制。 :)