如何使用AES算法进行加密
本文关键字:加密 算法 何使用 AES | 更新日期: 2023-09-27 18:24:01
我给出了一个.key(abc.key)文件。使用上面的.key文件,加密和解密是用Java完成的。在这里,我需要使用C#.net.实现相同的加密和解密功能
请告诉我如何破解这个。我是这些密码学的新手。
下面是他们在java中设置的一些参数。希望它能给一点想法
String keyFile="abc.key";
String keyAlgorithm= "AES";
String cipherTransformation="AES/CBC/PKCS5Padding";
String needtoEncStr = "Password1";
任何帮助都将不胜感激。
更新:
@daveBM:我使用了bouncycastle,但得到了不同的结果(和java输出不一样)。下面是我的完整代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using Org.BouncyCastle.Crypto;
using Org.BouncyCastle.Crypto.Engines;
using Org.BouncyCastle.Crypto.Generators;
using Org.BouncyCastle.Crypto.Modes;
using Org.BouncyCastle.Crypto.Paddings;
using Org.BouncyCastle.Crypto.Parameters;
using Org.BouncyCastle.Security;
using Org.BouncyCastle.Utilities.Encoders;
public class BCEngine
{
private readonly Encoding _encoding;
private readonly IBlockCipher _blockCipher;
private PaddedBufferedBlockCipher _cipher;
private IBlockCipherPadding _padding;
public BCEngine(IBlockCipher blockCipher, Encoding encoding)
{
_blockCipher = blockCipher;
_encoding = encoding;
}
public void SetPadding(IBlockCipherPadding padding)
{
if (padding != null)
_padding = padding;
}
public string Encrypt(string plain, string key)
{
byte[] result = BouncyCastleCrypto(true, _encoding.GetBytes(plain), key);
return Convert.ToBase64String(result);
}
public string Decrypt(string cipher, string key)
{
byte[] result = BouncyCastleCrypto(false, Convert.FromBase64String(cipher), key);
return _encoding.GetString(result);
}
/// <summary>
///
/// </summary>
/// <param name="forEncrypt"></param>
/// <param name="input"></param>
/// <param name="key"></param>
/// <returns></returns>
/// <exception cref="CryptoException"></exception>
private byte[] BouncyCastleCrypto(bool forEncrypt, byte[] input, string key)
{
try
{
_cipher = _padding == null ? new PaddedBufferedBlockCipher(_blockCipher) : new PaddedBufferedBlockCipher(_blockCipher, _padding);
byte[] keyByte = _encoding.GetBytes(key);
_cipher.Init(forEncrypt, new KeyParameter(keyByte));
return _cipher.DoFinal(input);
}
catch (Org.BouncyCastle.Crypto.CryptoException ex)
{
throw new CryptoException(ex.Message);
}
}
}
static void Main(string[] args)
{
Encoding _encoding;
IBlockCipherPadding _padding;
string key = "abc.key";
Stream inStr = null;
inStr = File.OpenRead(key);
Stream stream = inStr;
byte[] bytes = new byte[stream.Length];
stream.Position = 0;
stream.Read(bytes, 0, (int)stream.Length);
string data1 = Encoding.UTF8.GetString(bytes); // this is your string.
_encoding = Encoding.ASCII;
Pkcs7Padding pkcs = new Pkcs7Padding();
_padding = pkcs;
BCEngine bcEngine = new BCEngine(new AesEngine(), _encoding);
bcEngine.SetPadding(_padding);
string data=bcEngine.Encrypt("AbcDefg12$", data1);
}
当我的预期输出是"3df36eb77ccfc05e264a612c2db5380"时,我得到了这个输出"S2jjjvVJVKfGodPfMuI4v+g=="。。。请告诉我出了什么问题。
您可以使用别人在其他相关问题中善意发布的代码。
加密&解密C#中的字符串
您需要使用Encrypt(string plainText,string passPhrase)方法,其中plainText是您想要加密的内容,passPhrase则是.key文件的内容。
顺便说一句,只要提到你有一个.key文件就足够了。我们不需要知道内容:)。。
希望对有所帮助