如何使用AES 128加密和解密? [英] How can I encrypt and decrypt using AES 128 without an IV?

查看:218
本文介绍了如何使用AES 128加密和解密?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在C#中使用AES-128对称加密方法来加密一个字符串并解密一个字节数组。我找不到办法,但也许我错过了一些东西。

解决方案

导入命名空间

  using System; 
使用System.IO;
使用System.Text;
使用System.Security.Cryptography;

static void Main(string [] args)
{
string value =@ arifansari300< 3>;

string encryptedValue = EncryptDecrypt.Encrypt(value);

string decryptptedValue = EncryptDecrypt.Decrypt(encryptedValue);
}

public static string Encrypt(string clearText)
{
string EncryptionKey =MAKV2SPBNI99212;
byte [] clearBytes = Encoding.Unicode.GetBytes(clearText);
使用(Aes encryptor = Aes.Create())
{
Rfc2898DeriveBytes pdb = new
Rfc2898DeriveBytes(EncryptionKey,new byte []
{0x49,0x76,0x61 ,0x6e,0x20,0x4d,0x65,0x64,0x76,0x65,0x64,0x65,0x76});
encryptor.Key = pdb.GetBytes(32);
encryptor.IV = pdb.GetBytes(16);
使用(MemoryStream ms = new MemoryStream())
{
using(CryptoStream cs = new CryptoStream(ms,encryptor.CreateEncryptor(),CryptoStreamMode.Write))
{
cs.Write(clearBytes,0,clearBytes.Length);
cs.Close();
}
clearText = Convert.ToBase64String(ms.ToArray());
}
}
return clearText;
}

public static string Decrypt(string cipherText)
{
string EncryptionKey =MAKV2SPBNI99212;
byte [] cipherBytes = Convert.FromBase64String(cipherText);
使用(Aes encryptor = Aes.Create())
{
Rfc2898DeriveBytes pdb = new
Rfc2898DeriveBytes(EncryptionKey,new byte []
{0x49,0x76,0x61 ,0x6e,0x20,0x4d,0x65,0x64,0x76,0x65,0x64,0x65,0x76});
encryptor.Key = pdb.GetBytes(32);
encryptor.IV = pdb.GetBytes(16);
using(MemoryStream ms = new MemoryStream())
{
using(CryptoStream cs = new CryptoStream(ms,encryptor.CreateDecryptor(),CryptoStreamMode.Write))
{
cs.Write(cipherBytes,0,cipherBytes.Length);
cs.Close();
}
cipherText = Encoding.Unicode.GetString(ms.ToArray());
}
}
return cipherText;
}


I'm currently needing a way to encrypt a string and decrypt a byte array using AES-128 symmetrical encryption, in C#. I can't find a way how to do this, but maybe I've missed something.

解决方案

Import namespaces

using System;
using System.IO;
using System.Text;
using System.Security.Cryptography;

     static void Main(string[] args)
        {
            string value = "@arifansari300<3>";

            string encryptedValue= EncryptDecrypt.Encrypt(value);

            string decryptedValue = EncryptDecrypt.Decrypt(encryptedValue);
        }

    public static string Encrypt(string clearText)
    {
        string EncryptionKey = "MAKV2SPBNI99212";
        byte[] clearBytes = Encoding.Unicode.GetBytes(clearText);
        using (Aes encryptor = Aes.Create())
        {
            Rfc2898DeriveBytes pdb = new 
                Rfc2898DeriveBytes(EncryptionKey, new byte[] 
                { 0x49, 0x76, 0x61, 0x6e, 0x20, 0x4d, 0x65, 0x64, 0x76, 0x65, 0x64, 0x65, 0x76 });
            encryptor.Key = pdb.GetBytes(32);
            encryptor.IV = pdb.GetBytes(16);
            using (MemoryStream ms = new MemoryStream())
            {
                using (CryptoStream cs = new CryptoStream(ms, encryptor.CreateEncryptor(), CryptoStreamMode.Write))
                {
                    cs.Write(clearBytes, 0, clearBytes.Length);
                    cs.Close();
                }
                clearText = Convert.ToBase64String(ms.ToArray());
            }
        }
        return clearText;
    }

    public static string Decrypt(string cipherText)
    {
        string EncryptionKey = "MAKV2SPBNI99212";
        byte[] cipherBytes = Convert.FromBase64String(cipherText);
        using (Aes encryptor = Aes.Create())
        {
            Rfc2898DeriveBytes pdb = new 
                Rfc2898DeriveBytes(EncryptionKey, new byte[] 
                { 0x49, 0x76, 0x61, 0x6e, 0x20, 0x4d, 0x65, 0x64, 0x76, 0x65, 0x64, 0x65, 0x76 });
            encryptor.Key = pdb.GetBytes(32);
            encryptor.IV = pdb.GetBytes(16);
            using (MemoryStream ms = new MemoryStream())
            {
                using (CryptoStream cs = new CryptoStream(ms, encryptor.CreateDecryptor(), CryptoStreamMode.Write))
                {
                    cs.Write(cipherBytes, 0, cipherBytes.Length);
                    cs.Close();
                }
                cipherText = Encoding.Unicode.GetString(ms.ToArray());
            }
        }
        return cipherText;
    }

这篇关于如何使用AES 128加密和解密?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆