파트너의 JAVA API와 대화하는 동안 일부 데이터를 암호화하도록 요청 받았으며 그는 암호화 알고리즘에 대한 다음 세부 정보를 보냈습니다.
아래 코드를 사용했지만 그와 일치하는 결과를 얻지 못했습니다.
public byte[] AES_Encrypt(byte[] bytesToBeEncrypted, byte[] passwordBytes)
{
byte[] encryptedBytes = null;
byte[] saltBytes = new byte[16] { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
using (MemoryStream ms = new MemoryStream())
{
using (RijndaelManaged aes = new RijndaelManaged())
{
aes.KeySize = 256;
aes.BlockSize = 128;
var key = new Rfc2898DeriveBytes(passwordBytes, saltBytes, 1000);
aes.Key = key.GetBytes(aes.KeySize / 8);
aes.IV = key.GetBytes(aes.BlockSize / 8);
aes.Padding = PaddingMode.PKCS7;
aes.Mode = CipherMode.CBC;
using (var cs = new CryptoStream(ms, aes.CreateEncryptor(), CryptoStreamMode.Write))
{
cs.Write(bytesToBeEncrypted, 0, bytesToBeEncrypted.Length);
cs.Close();
}
encryptedBytes = ms.ToArray();
}
}
return encryptedBytes;
}
public string EncryptText(string input, string password)
{
byte[] bytesToBeEncrypted = Encoding.UTF8.GetBytes(input);
byte[] passwordBytes = Encoding.UTF8.GetBytes(password);
passwordBytes = SHA256.Create().ComputeHash(passwordBytes);
byte[] bytesEncrypted = AES_Encrypt(bytesToBeEncrypted, passwordBytes);
string result = Convert.ToBase64String(bytesEncrypted);
return result;
}
그래서 우리가 Hello 를 암호화하려고 할 때 어떻게 지내십니까? , 나는 다른 결과를 얻었고 그가 보낸 데이터를 그의 측에서 해독하고 처리 할 것이므로 그가 가진 것과 동일한 결과를 얻어야합니다. 주어진 예제는 다음과 같은 결과를 가져야합니다.TJTojNoVgoqnhCj4uTv1jLBiZU7r+s/0Bm234bHU+S0=
몇 가지 테스트를했고 이제 예상 한 결과와 일치 할 수 있습니다.
2 개의 변경이 완료됩니다.
IV
IV = 0이라고 말했듯이 IV가 가장 쉬우므로 IV를 다음과 같이 설정하십시오.
aes.IV = new byte[16];
AES에서 IV는 16 바이트 입니다. 위의 방법은 각 값이 0으로 초기화 된 16 바이트의 바이트 배열을 만듭니다.
키
입력 한 암호는 "0x"로 시작합니다. 이것은 본질적으로 이것이 암호 문자열의 16 진수 표현임을 의미합니다. 나는 이것을 사용 하여이 암호를 바이트 배열로 변환 했습니다.
string password = "A8703827AE586460105696504327B7BB0806FEAE96BD664F89E36868FBB48E3D";
위에서 시작하는 "0x"를 제거했습니다.
byte[] passwordBytes = StringToByteArray(password);
위 코드는 16 진수 암호 표현을 바이트 배열로 변환합니다.
당신에 AES_Encrypt
방법, 직접 키로서이 byte를 [] 지정
aes.Key = passwordBytes;
이제 내 결과는 TJTojNoVgoqnhCj4uTv1jLBiZU7r+s/0Bm234bHU+S0=
예상 출력과 정확히 일치합니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다