Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从C#解密AES,从Java加密_C#_Java_Aes_Encryption - Fatal编程技术网

从C#解密AES,从Java加密

从C#解密AES,从Java加密,c#,java,aes,encryption,C#,Java,Aes,Encryption,我们使用下面的代码在Java中进行加密 public encrypt(String text) throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, InvalidKeySpecException { SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1"); KeySpec spe

我们使用下面的代码在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#解密数据 他的密码

但他无法解密数据。他得到一些垃圾数据。
任何关于如何使用C#for Java加密部分解密的想法。

首先,不要在Java代码中提及任何安全性。模式不是一个好的选择


其次,C代码的问题在于它使用passphase的原始字节作为密钥,而不是java代码使用的
PBKDF2WithHmacSHA1
。C#中用于生成密钥的类是

首先,不要对java代码使用任何安全性暗示。模式不是一个好的选择


其次,C代码的问题在于它使用passphase的原始字节作为密钥,而不是java代码使用的
PBKDF2WithHmacSHA1
。C#中用于生成密钥的类是

您试过调试它吗?我不是C#开发人员。抱歉,但我必须帮助供应商修复:(当时是谁写的C#代码?我几乎不相信有人能从臀部拍到这个……正如我提到的,这是供应商方。他们无法修复并寻求帮助,因为他们不确定Java。但最终我的工作也是修复他们的一方。只是一个简单的问题。他们是否按照我在ja中的加密使用了正确的解密va?我不知道…我甚至不知道RijndaelManaged是什么…你需要一个调试器来检查这一点,它不会以这种方式工作。此外,如果你知道Java,C完全不会构成这样的挑战。你试过调试它吗?我不是C开发人员。对不起,但我必须帮助供应商解决这个问题:(当时是谁写的C#代码?我几乎不相信有人能从臀部拍到这个……正如我提到的,这是供应商方。他们无法修复并寻求帮助,因为他们不确定Java。但最终我的工作也是修复他们的一方。只是一个简单的问题。他们是否按照我在ja中的加密使用了正确的解密va?我不知道…我甚至不知道RijndaelManaged是什么…你需要一个调试器来检查这一点,它不会以这种方式工作。而且,如果你知道Java,C#根本不会构成这样的挑战。措辞相当强硬,但仍然提出了所有必要的观点。@ChrisCooney我想,当你看到同样糟糕的encr时,我会稍微软化它一次又一次的加密代码,有一种强烈的愿望,就是要在这一点上大刀阔斧。同意。当你看到人们在SQL查询中使用MD5或不使用预处理语句时,情况也是如此。你只需记住,他们没有相同的经验,我想:)谢谢jbtule。但因为这完全是内部服务[这不是我的决定,尽管我早就警告过他们]。我们还有更多的安全措施。这只是为了防止任何db人员和组织内的普通用户看不到信息。请您更新我随您的建议发布的C#代码段。如果是Java,我至少可以通过点击和试用来完成:)措辞相当强硬,但仍然提出了所有必要的观点。@ChrisCooney我把它软化了一点,我想,当你一遍又一遍地看到同样糟糕的加密代码时,会有一种强烈的愿望来强调这一点。同意。当你看到人们在SQL查询中使用MD5或不使用预处理语句时也是如此。你只需要记住我想你没有相同的经验:)谢谢jbtule。但因为这完全是内部服务[这不是我的决定,尽管我很久以前就警告过他们]。我们还有更多的安全措施。这只是为了防止任何db人员和组织内的普通用户看不到信息。请您更新我随您的建议发布的C#代码段。如果是Java,我至少可以通过点击和试用来完成:)
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); 
}