@Shalom:
Mimo, ostatniej pomocy, nadal nie ogarniam krypto na tyle zeby ogarnac prosty mechanizm.
kod javovy
public static String decrypt(String cipherText, PrivateKey privateKey,
String encryptedKey) throws Exception {
Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
cipher.init(Cipher.PRIVATE_KEY, privateKey);
byte[] decryptedKey = cipher.doFinal(Base64.getDecoder().decode(
encryptedKey));
// Convert bytes to AES SecretKey
SecretKey originalKey = new SecretKeySpec(decryptedKey, 0,
decryptedKey.length, "AES");
Cipher aesCipher = Cipher.getInstance("AES");
aesCipher.init(Cipher.DECRYPT_MODE, originalKey);
byte[] bytes = Base64.getDecoder().decode(cipherText);
return new String(aesCipher.doFinal(bytes), UTF_8);
}
- dekodujemy z base64 encrypted key na
byte[]
- kluczem dekodujemy
byte[]
za pomocaRSA/ECB/PKCS1Padding"
. Tutaj nie do konca wiem jak to ustawic w c# - bierzemy zdekodowany klucz i go kodujemy za pomoca AES dzieki czemu powstaje oryginalny klucz.
- nastepnie za pomoca orignalnego klucza mozemy zrobic decrypt za pomoca AES na zakodowanym tekscie. zamienic
byte[]
na string za pomoca utf8
I troche sie zatrzymalem.
- podpunkt zrobilem, z drugim mam juz troszke problemy, w sensie nie jestem pewien czy dobrze zrobilem. 3) nie ogarniam bo nie mam Key ani IV do aes crypto i nie wiem skad je wziac (czy je w ogole potrzebuje) do 4) jeszcze nie doszedlem :D
public static string Decrypt(string encryptedMessage, RSACryptoServiceProvider privateKey, string encryptedKey)
{
var bytesEncryptedKey = Convert.FromBase64String(encryptedKey);
var decryptedKeyData = privateKey.Decrypt(bytesEncryptedKey, false);
//var str = System.Text.Encoding.Default.GetString(decryptedKeyData);
//var result = Convert.ToBase64String(decryptedKeyData);
using (MemoryStream mStream = new MemoryStream(decryptedKeyData))
using (AesCryptoServiceProvider aesProvider = new AesCryptoServiceProvider())
{
using (CryptoStream cryptoStream = new CryptoStream(mStream,
aesProvider.CreateDecryptor(Key, IV), CryptoStreamMode.Read)) // nie mam skad wziac Key ani IV. Juz wiem ze robie cos zle :D
{
cryptoStream.Read(decryptedKeyData , 0, decryptedKeyData .Length);
}
var plain = mStream.ToArray();
}
return result;
}
troche stoje w miescu, wiec cokolwiek byloby bardzo pomocne zeby mnie popchac w jakims kierunku :)