Java BouncyCastle AES解密的C#等效项是什么?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Java BouncyCastle AES解密的C#等效项是什么?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2811字,纯文字阅读大概需要5分钟。
内容图文
![Java BouncyCastle AES解密的C#等效项是什么?](/upload/InfoBanner/zyjiaocheng/678/053457376edb4721b71cd7940be2f487.jpg)
我有以下Java代码需要转换为c#:
public static byte[] encryptAES(byte[] toEncrypt, byte[] key,
boolean encrypte) throws Exception {
Security.addProvider(new BouncyCastleProvider());
byte[] iv = { (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
(byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
(byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
(byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00 };
IvParameterSpec salt = new IvParameterSpec(iv);
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding", "BC");
if (encrypte == false)
cipher.init(Cipher.DECRYPT_MODE, new SecretKeySpec(key, "AES"), salt);
else
cipher.init(Cipher.ENCRYPT_MODE, new SecretKeySpec(key, "AES"), salt);
byte[] result = cipher.doFinal(toEncrypt);
return result;
}
您如何做相当于:
Security.addProvider(new BouncyCastleProvider());
什么是等同于:
IvParameterSpec salt = new IvParameterSpec(iv);
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding", "BC");
解决方法:
试试看
根据http://social.msdn.microsoft.com/Forums/en-US/13a20d89-7d84-4f7d-8f5c-5ae108a7f5cf/des-encryption-padding-mode-pkcs5?forum=csharplanguage,pkcs#5与pkcs#7相同.
public static byte[] EncryptDataAES(byte[] toEncrypt, byte[] key)
{
byte[] encryptedData;
byte[] iv = { (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
(byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
(byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
(byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00 };
using (SymmetricAlgorithm aes = SymmetricAlgorithm.Create())
{
aes.Mode = CipherMode.CBC;
aes.Key = key;
aes.IV = iv;
aes.Padding = PaddingMode.PKCS7;
ICryptoTransform encryptor = aes.CreateEncryptor();
using (MemoryStream mStream = new MemoryStream())
{
using (CryptoStream cStream = new CryptoStream(mStream, encryptor, CryptoStreamMode.Write))
{
cStream.Write(toEncrypt, 0, toEncrypt.Length);
cStream.FlushFinalBlock();
encryptedData = mStream.ToArray();
}
}
}
return encryptedData;
}
解密:
public static string DecryptDataAES(byte[] cipherText, byte[] key, byte[] iv)
{
string plaintext = null;
using (Rijndael rijAlg = Rijndael.Create())
{
rijAlg.Key = key;
rijAlg.IV = iv;
ICryptoTransform decryptor = rijAlg.CreateDecryptor(rijAlg.Key, rijAlg.IV);
// Create the streams used for decryption.
using (MemoryStream msDecrypt = new MemoryStream(cipherText))
{
using (CryptoStream csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read))
{
using (StreamReader srDecrypt = new StreamReader(csDecrypt))
{
plaintext = srDecrypt.ReadToEnd();
}
}
}
}
return plaintext;
}
使用它来解码您的密钥,该密钥是字节的十六进制表示形式.
public static byte[] StringToByteArray(String hex)
{
int NumberChars = hex.Length / 2;
byte[] bytes = new byte[NumberChars];
using (var sr = new StringReader(hex))
{
for (int i = 0; i < NumberChars; i++)
bytes[i] =
Convert.ToByte(new string(new char[2] { (char)sr.Read(), (char)sr.Read() }), 16);
}
return bytes;
}
内容总结
以上是互联网集市为您收集整理的Java BouncyCastle AES解密的C#等效项是什么?全部内容,希望文章能够帮你解决Java BouncyCastle AES解密的C#等效项是什么?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。