Below are instructions on how to encrypt a string using a private key. The encryption will be reversible if you got the private key.
To encrypt use this command:
aiplib.Crypt crypt = new aiplib.Crypt();
string encrypted = crypt.Encrypt("privatekey", "value");
Replace privatekey with a string used as a private key. Replace value with a string that should be encrypted. The encrypted password in base64 format will be returned to the encrypted variable.
To decrypt use this command:
aiplib.Crypt crypt = new aiplib.Crypt();
string value = crypt.Decrypt("privatekey", "encryptedvalue");
Replace privatekey with a string used as a private key. Replace encryptedvalue with a base64 encrypted value returned by the Encrypt method. The original value will be returned to the value string.
Crypt.cs source code (Click here to download the class):
using System.Text;
using Windows.Security.Cryptography;
using Windows.Security.Cryptography.Core;
using Windows.Storage.Streams;
namespace aiplib
{
public class Crypt
{
public static string Encrypt(string key, string value)
{
// Private key has to be exactly 16 characters
if (key.Length > 16)
{
// Cut of the end if it exceeds 16 characters
key = key.Substring(0, 16);
}
else
{
// Append zero to make it 16 characters if the provided key is less
while (key.Length < 16)
{
key += "0";
}
}
// We'll be using AES, CBC mode with PKCS#7 padding to encrypt
SymmetricKeyAlgorithmProvider aesCbcPkcs7 = SymmetricKeyAlgorithmProvider.OpenAlgorithm(SymmetricAlgorithmNames.AesCbcPkcs7);
// Convert the private key to binary
IBuffer keymaterial = CryptographicBuffer.ConvertStringToBinary(key, BinaryStringEncoding.Utf8);
// Create the private key
CryptographicKey k = aesCbcPkcs7.CreateSymmetricKey(keymaterial);
// Convert the data to byte array
byte[] plainText = Encoding.UTF8.GetBytes(value); // Data to encrypt
// Do the actual encryption
IBuffer buff = CryptographicEngine.Encrypt(k, CryptographicBuffer.CreateFromByteArray(plainText), keymaterial);
// Return the encrypted string base64 encoded
return CryptographicBuffer.EncodeToBase64String(buff);
}
public static string Decrypt(string key, string value)
{
// Private key has to be exactly 16 characters
if (key.Length > 16)
{
// Cut of the end if it exceeds 16 characters
key = key.Substring(0, 16);
}
else
{
// Append zero to make it 16 characters if the provided key is less
while (key.Length < 16)
{
key += "0";
}
}
// Decode the base64 string provided to binary data
IBuffer val = CryptographicBuffer.DecodeFromBase64String(value);
// We'll be using AES, CBC mode with PKCS#7 padding to decrypt
SymmetricKeyAlgorithmProvider aesCbcPkcs7 = SymmetricKeyAlgorithmProvider.OpenAlgorithm(SymmetricAlgorithmNames.AesCbcPkcs7);
// Convert the private key to binary
IBuffer keymaterial = CryptographicBuffer.ConvertStringToBinary(key, BinaryStringEncoding.Utf8);
// Create the private key
CryptographicKey k = aesCbcPkcs7.CreateSymmetricKey(keymaterial);
// Do the actual decryption
IBuffer buff = CryptographicEngine.Decrypt(k, val, keymaterial);
// return the string as plain text
return CryptographicBuffer.ConvertBinaryToString(BinaryStringEncoding.Utf8, buff);
}
}
}