.key (abc.key) 파일을 제공했습니다. 위의 .key 파일을 사용하면 Java에서 암호화 및 암호 해독이 수행됩니다. 여기에 C# .net을 사용하여 동일한 암호화 및 암호 해독 기능을 구현해야합니다.AES 알고리즘을 사용하여 암호화하는 방법
이 문제를 해결하는 방법을 알려주세요. 나는이 암호화 기법에 초보자이다.
자바에서 설정하는 매개 변수 중 일부는 다음과 같습니다. 작은 생각을 줄 수 있기를 바랍니다.
String keyFile="abc.key";
String keyAlgorithm= "AES";
String cipherTransformation="AES/CBC/PKCS5Padding";
String needtoEncStr = "Password1";
어떤 도움을 주시면 감사하겠습니다. I가 사용되지만 bouncycastle (자바 출력과 동일하지 않음) 다른 결과를 얻는 M :
@daveBM을 :
업데이트되었습니다. 아래에있는 내 전체 코드
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);
}
내가이 출력을 얻고있다 "S2jjvVJVKfGodPfMuI4v + g =="내 예상 출력은 "3df36eb77ccfc05e264a6212c2db5380는"때 ... 오해는 무슨 일이 일어나고 있는지 알려 주시기 바랍니다 있습니다.
전 세계의 비밀 키를 게시하는 것은 좋지 않을 것입니다. –
여기에 답변 : http : //lamahashim.blogspot.com/2009/08/encyptiondecryption-in-c-and-java.html – mikeswright49
번지 성 라이브러리를 사용하고 www를 사용하여 훨씬 쉽게 작업 할 수 있습니다. bouncycastle.org – daveBM