我们正在使用以下代码在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#读取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个字。可能有问题吗? 参考方案 您仅受记忆和理智的限制。 :)