Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用什么样的C#AES加密选项可以在公共网站上解密结果?_C#_Aes - Fatal编程技术网

使用什么样的C#AES加密选项可以在公共网站上解密结果?

使用什么样的C#AES加密选项可以在公共网站上解密结果?,c#,aes,C#,Aes,我想使用类似于下面的代码加密字符串,并能够使用公开的网站(如其中一个)对其进行解密(但我也向其他网站开放): 这是我目前正在这些网站上使用和尝试的代码,我还没有找到使这项工作起作用的选项。有什么想法吗 public class AES { private readonly int _saltSize = 32; public string Encrypt(string plainText, string key)

我想使用类似于下面的代码加密字符串,并能够使用公开的网站(如其中一个)对其进行解密(但我也向其他网站开放):

这是我目前正在这些网站上使用和尝试的代码,我还没有找到使这项工作起作用的选项。有什么想法吗

public class AES { private readonly int _saltSize = 32; public string Encrypt(string plainText, string key) { if (string.IsNullOrEmpty(plainText)) { throw new ArgumentNullException("plainText"); } if (string.IsNullOrEmpty(key)) { throw new ArgumentNullException("key"); } using (var keyDerivationFunction = new Rfc2898DeriveBytes(key, _saltSize)) { byte[] saltBytes = keyDerivationFunction.Salt; byte[] keyBytes = keyDerivationFunction.GetBytes(32); byte[] ivBytes = keyDerivationFunction.GetBytes(16); using (var aesManaged = new AesManaged()) { aesManaged.KeySize = 256; using (var encryptor = aesManaged.CreateEncryptor(keyBytes, ivBytes)) { MemoryStream memoryStream = null; CryptoStream cryptoStream = null; return WriteMemoryStream(plainText, ref saltBytes, encryptor, ref memoryStream, ref cryptoStream); } } } } public string Decrypt(string ciphertext, string key) { if (string.IsNullOrEmpty(ciphertext)) { throw new ArgumentNullException("ciphertext"); } if (string.IsNullOrEmpty(key)) { throw new ArgumentNullException("key"); } var allTheBytes = Convert.FromBase64String(ciphertext); var saltBytes = allTheBytes.Take(_saltSize).ToArray(); var ciphertextBytes = allTheBytes.Skip(_saltSize).Take(allTheBytes.Length - _saltSize).ToArray(); using (var keyDerivationFunction = new Rfc2898DeriveBytes(key, saltBytes)) { var keyBytes = keyDerivationFunction.GetBytes(32); var ivBytes = keyDerivationFunction.GetBytes(16); return DecryptWithAES(ciphertextBytes, keyBytes, ivBytes); } } private string WriteMemoryStream(string plainText, ref byte[] saltBytes, ICryptoTransform encryptor, ref MemoryStream memoryStream, ref CryptoStream cryptoStream) { try { memoryStream = new MemoryStream(); try { cryptoStream = new CryptoStream(memoryStream, encryptor, CryptoStreamMode.Write); using (var streamWriter = new StreamWriter(cryptoStream)) { streamWriter.Write(plainText); } } finally { if (cryptoStream != null) { cryptoStream.Dispose(); } } var cipherTextBytes = memoryStream.ToArray(); Array.Resize(ref saltBytes, saltBytes.Length + cipherTextBytes.Length); Array.Copy(cipherTextBytes, 0, saltBytes, _saltSize, cipherTextBytes.Length); return Convert.ToBase64String(saltBytes); } finally { if (memoryStream != null) { memoryStream.Dispose(); } } } private static string DecryptWithAES(byte[] ciphertextBytes, byte[] keyBytes, byte[] ivBytes) { using (var aesManaged = new AesManaged()) { using (var decryptor = aesManaged.CreateDecryptor(keyBytes, ivBytes)) { MemoryStream memoryStream = null; CryptoStream cryptoStream = null; StreamReader streamReader = null; try { memoryStream = new MemoryStream(ciphertextBytes); cryptoStream = new CryptoStream(memoryStream, decryptor, CryptoStreamMode.Read); streamReader = new StreamReader(cryptoStream); return streamReader.ReadToEnd(); } finally { if (memoryStream != null) { memoryStream.Dispose(); memoryStream = null; } } } } } } 公共类AES { 私有只读int_saltSize=32; 公共字符串加密(字符串明文、字符串密钥) { if(string.IsNullOrEmpty(纯文本)) { 抛出新的ArgumentNullException(“明文”); } if(string.IsNullOrEmpty(key)) { 抛出新的ArgumentNullException(“键”); } 使用(var keydrivationfunction=new Rfc2898DeriveBytes(key,_saltSize)) { byte[]saltBytes=keydrivationfunction.Salt; byte[]keyBytes=keydrivationfunction.GetBytes(32); byte[]ivBytes=keydrivationfunction.GetBytes(16); 使用(var aesManaged=new aesManaged()) { aesManaged.KeySize=256; 使用(var encryptor=aesManaged.CreateEncryptor(keyBytes,ivBytes)) { MemoryStream MemoryStream=null; CryptoStream CryptoStream=null; 返回WriteMemoryStream(纯文本、ref saltBytes、加密程序、ref memoryStream、ref加密流); } } } } 公共字符串解密(字符串密文、字符串密钥) { if(string.IsNullOrEmpty(密文)) { 抛出新的ArgumentNullException(“密文”); } if(string.IsNullOrEmpty(key)) { 抛出新的ArgumentNullException(“键”); } var allTheBytes=Convert.fromBase64字符串(密文); var saltBytes=allTheBytes.Take(_saltSize.ToArray(); var ciphertextBytes=allTheBytes.Skip(_saltSize).Take(allTheBytes.Length-_saltSize).ToArray(); 使用(var keydrivationfunction=new Rfc2898DeriveBytes(key,saltBytes)) { var keyBytes=keydrivationfunction.GetBytes(32); var ivBytes=keydrivationfunction.GetBytes(16); 返回DecryptWithAES(ciphertextBytes、keyBytes、ivBytes); } } 私有字符串WriteMemoryStream(字符串明文、ref字节[]盐字节、ICryptoTransform加密程序、ref MemoryStream MemoryStream、ref CryptoStream CryptoStream) { 尝试 { memoryStream=新的memoryStream(); 尝试 { cryptoStream=新的加密流(memoryStream、encryptor、CryptoStreamMode.Write); 使用(var streamWriter=newstreamwriter(cryptoStream)) { streamWriter.Write(纯文本); } } 最后 { if(加密流!=null) { cryptoStream.Dispose(); } } var cipherTextBytes=memoryStream.ToArray(); Array.Resize(ref saltBytes,saltBytes.Length+cipherTextBytes.Length); 复制(cipherTextBytes,0,saltBytes,_saltSize,cipherTextBytes.Length); 返回Convert.ToBase64String(saltBytes); } 最后 { if(memoryStream!=null) { memoryStream.Dispose(); } } } 专用静态字符串DecryptWithAES(字节[]ciphertextBytes,字节[]keyBytes,字节[]ivBytes) { 使用(var aesManaged=new aesManaged()) { 使用(var decryptor=aesManaged.CreateDecryptor(keyBytes,ivBytes)) { MemoryStream MemoryStream=null; CryptoStream CryptoStream=null; StreamReader StreamReader=null; 尝试 { memoryStream=新的memoryStream(密文字节); cryptoStream=新的加密流(memoryStream、DecryptoStream、CryptoStreamMode.Read); streamReader=新的streamReader(加密流); 返回streamReader.ReadToEnd(); } 最后 { if(memoryStream!=null) { memoryStream.Dispose(); memoryStream=null; } } } } } }
下面的代码用于使用密钥“abcdefghijklmnop”加密字符串“thisatest”,然后在站点解密

static void test()
{
Console.WriteLine(Convert.ToBase64String(EncryptStringToBytes(“这是一个测试”,System.Text.Encoding.ASCII.GetBytes(“abcdefghijklmnop”))));
}
静态字节[]加密StringToBytes(字符串明文,字节[]密钥)
{

如果(plainText==null | | plainText.Length密码学不是我的强项,
    static void test()
    {
        Console.WriteLine(Convert.ToBase64String(EncryptStringToBytes("this is a test", System.Text.Encoding.ASCII.GetBytes("abcdefghijklmnop"))));
    }

    static byte[] EncryptStringToBytes(string plainText, byte[] key)
    {
        if (plainText == null || plainText.Length <= 0)
            throw new ArgumentNullException("plainText");
        if (key == null || key.Length <= 0)
            throw new ArgumentNullException("key");

        byte[] encrypted;
        using (var rijAlg = new RijndaelManaged())
        {
            rijAlg.BlockSize = 256;
            rijAlg.Key = key;
            rijAlg.Mode = CipherMode.ECB;
            rijAlg.Padding = PaddingMode.Zeros;
            rijAlg.IV = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };

            ICryptoTransform encryptor = rijAlg.CreateEncryptor(rijAlg.Key, rijAlg.IV);
            using (var msEncrypt = new MemoryStream())
            using (var csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write))
            {
                using (var swEncrypt = new StreamWriter(csEncrypt))
                    swEncrypt.Write(plainText);
                encrypted = msEncrypt.ToArray();
            }
        }
        return encrypted;
    }