public string Decrypt(string xmlkeystring, Algorithms typo, string datatodecrypt) { RSA rsaer = RSACry.ReadKeyString(xmlkeystring); byte[] result = RSACry.DecryptIt(rsaer, typo, datatodecrypt); return(System.Text.Encoding.UTF8.GetString(result)); }
public string Encrypt(string xmlkeystring, Algorithms typo, string datatoencrypt) { RSA rsaer = RSACry.ReadKeyString(xmlkeystring); byte[] result = RSACry.EncryptIt(rsaer, typo, datatoencrypt); return(System.Convert.ToBase64String(result)); }
public static byte[] DecryptIt(RSA rsaer, Algorithms typo, string datatodecrypt) { byte[] result = null; try { byte[] encrbytes = System.Convert.FromBase64String(datatodecrypt); SymmetricAlgorithm sa = SymmetricAlgorithm.Create(RSACry.GetAlgorithmName(typo)); byte[] keyex = new byte[(rsaer.KeySize >> 3) - 1]; Buffer.BlockCopy(encrbytes, 0, keyex, 0, keyex.Length); RSAPKCS1KeyExchangeDeformatter def = new RSAPKCS1KeyExchangeDeformatter(rsaer); byte[] key = def.DecryptKeyExchange(keyex); byte[] iv = new byte[sa.IV.Length - 1]; Buffer.BlockCopy(encrbytes, keyex.Length, iv, 0, iv.Length); ICryptoTransform ct = sa.CreateDecryptor(key, iv); result = ct.TransformFinalBlock(encrbytes, keyex.Length + iv.Length, (encrbytes.Length - 1) - (keyex.Length + iv.Length)); } catch (Exception ex) { throw new CryptographicException("Unable to decrypt: " + ex.Message); } return(result); }
public static byte[] EncryptIt(RSA rsaer, Algorithms typo, string datatoencrypt) { byte[] result = null; try { byte[] plainbytes = System.Text.Encoding.UTF8.GetBytes(datatoencrypt); SymmetricAlgorithm sa = SymmetricAlgorithm.Create(RSACry.GetAlgorithmName(typo)); ICryptoTransform ct = sa.CreateEncryptor(); byte[] encrypt = ct.TransformFinalBlock(plainbytes, 0, plainbytes.Length); RSAPKCS1KeyExchangeFormatter fmt = new RSAPKCS1KeyExchangeFormatter(rsaer); byte[] keyex = fmt.CreateKeyExchange(sa.Key); //--return the key exchange, the IV (public) and encrypted data result = new byte[keyex.Length + sa.IV.Length + encrypt.Length]; Buffer.BlockCopy(keyex, 0, result, 0, keyex.Length); Buffer.BlockCopy(sa.IV, 0, result, keyex.Length, sa.IV.Length); Buffer.BlockCopy(encrypt, 0, result, keyex.Length + sa.IV.Length, encrypt.Length); } catch (Exception ex) { throw new CryptographicException("Unable to crypt: " + ex.Message); } return(result); }