gpt4 book ai didi

c# - c#.net中的简单加密算法

转载 作者:太空宇宙 更新时间:2023-11-03 17:41:58 24 4
gpt4 key购买 nike

我正在尝试从文件中读取文本并对其进行加密并将其传递给字符串格式的函数。
后来我也想解密。

我尝试了以下但它没有做任何加密。谁能建议任何简单的加密算法?

fileStream = store.OpenFile(strFilePath, FileMode.Open, FileAccess.Read);
strEncryptedFileStream = Encoding.Unicode.GetBytes(fileStream.ToString()).ToString();

最佳答案

使用 AES .这是一个帮助类。使用“简单”,或者换句话说,容易破解的加密是没有意义的。要么你希望人们能够打破它,要么你不。选择众所周知并经过测试的加密标准。

如果下面的示例不能满足您的需要,您可以修改它。

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

namespace Common.Cryptography
{
/// <summary>
/// AES is a symmetric 256-bit encryption algorthm.
/// Read more: http://en.wikipedia.org/wiki/Advanced_Encryption_Standard
/// </summary>
public static class AES
{
private const string _SALT = "g46dzQ80";
private const string _INITVECTOR = "OFRna74m*aze01xY";

private static byte[] _saltBytes;
private static byte[] _initVectorBytes;

static AES()
{
_saltBytes = Encoding.UTF8.GetBytes(_SALT);
_initVectorBytes = Encoding.UTF8.GetBytes(_INITVECTOR);
}


/// <summary>
/// Encrypts a string with AES
/// </summary>
/// <param name="plainText">Text to be encrypted</param>
/// <param name="password">Password to encrypt with</param>
/// <param name="salt">Salt to encrypt with</param>
/// <param name="initialVector">Needs to be 16 ASCII characters long</param>
/// <returns>An encrypted string</returns>
public static string Encrypt(string plainText, string password, string salt = null, string initialVector = null)
{
return Convert.ToBase64String(EncryptToBytes(plainText, password, salt, initialVector));
}

/// <summary>
/// Encrypts a string with AES
/// </summary>
/// <param name="plainText">Text to be encrypted</param>
/// <param name="password">Password to encrypt with</param>
/// <param name="salt">Salt to encrypt with</param>
/// <param name="initialVector">Needs to be 16 ASCII characters long</param>
/// <returns>An encrypted string</returns>
public static byte[] EncryptToBytes(string plainText, string password, string salt = null, string initialVector = null)
{
byte[] plainTextBytes = Encoding.UTF8.GetBytes(plainText);
return EncryptToBytes(plainTextBytes, password, salt, initialVector);
}

/// <summary>
/// Encrypts a string with AES
/// </summary>
/// <param name="plainTextBytes">Bytes to be encrypted</param>
/// <param name="password">Password to encrypt with</param>
/// <param name="salt">Salt to encrypt with</param>
/// <param name="initialVector">Needs to be 16 ASCII characters long</param>
/// <returns>An encrypted string</returns>
public static byte[] EncryptToBytes(byte[] plainTextBytes, string password, string salt = null, string initialVector = null)
{
int keySize = 256;

byte[] initialVectorBytes = string.IsNullOrEmpty(initialVector) ? _initVectorBytes : Encoding.UTF8.GetBytes(initialVector);
byte[] saltValueBytes = string.IsNullOrEmpty(salt) ? _saltBytes : Encoding.UTF8.GetBytes(salt);
byte[] keyBytes = new Rfc2898DeriveBytes(password, saltValueBytes).GetBytes(keySize / 8);

using (RijndaelManaged symmetricKey = new RijndaelManaged())
{
symmetricKey.Mode = CipherMode.CBC;

using (ICryptoTransform encryptor = symmetricKey.CreateEncryptor(keyBytes, initialVectorBytes))
{
using (MemoryStream memStream = new MemoryStream())
{
using (CryptoStream cryptoStream = new CryptoStream(memStream, encryptor, CryptoStreamMode.Write))
{
cryptoStream.Write(plainTextBytes, 0, plainTextBytes.Length);
cryptoStream.FlushFinalBlock();

return memStream.ToArray();
}
}
}
}
}

/// <summary>
/// Decrypts an AES-encrypted string.
/// </summary>
/// <param name="cipherText">Text to be decrypted</param>
/// <param name="password">Password to decrypt with</param>
/// <param name="salt">Salt to decrypt with</param>
/// <param name="initialVector">Needs to be 16 ASCII characters long</param>
/// <returns>A decrypted string</returns>
public static string Decrypt(string cipherText, string password, string salt = null, string initialVector = null)
{
byte[] cipherTextBytes = Convert.FromBase64String(cipherText.Replace(' ','+'));
return Decrypt(cipherTextBytes, password, salt, initialVector).TrimEnd('\0');
}

/// <summary>
/// Decrypts an AES-encrypted string.
/// </summary>
/// <param name="cipherText">Text to be decrypted</param>
/// <param name="password">Password to decrypt with</param>
/// <param name="salt">Salt to decrypt with</param>
/// <param name="initialVector">Needs to be 16 ASCII characters long</param>
/// <returns>A decrypted string</returns>
public static string Decrypt(byte[] cipherTextBytes, string password, string salt = null, string initialVector = null)
{
int keySize = 256;

byte[] initialVectorBytes = string.IsNullOrEmpty(initialVector) ? _initVectorBytes : Encoding.UTF8.GetBytes(initialVector);
byte[] saltValueBytes = string.IsNullOrEmpty(salt) ? _saltBytes : Encoding.UTF8.GetBytes(salt);
byte[] keyBytes = new Rfc2898DeriveBytes(password, saltValueBytes).GetBytes(keySize / 8);
byte[] plainTextBytes = new byte[cipherTextBytes.Length];

using (RijndaelManaged symmetricKey = new RijndaelManaged())
{
symmetricKey.Mode = CipherMode.CBC;

using (ICryptoTransform decryptor = symmetricKey.CreateDecryptor(keyBytes, initialVectorBytes))
{
using (MemoryStream memStream = new MemoryStream(cipherTextBytes))
{
using (CryptoStream cryptoStream = new CryptoStream(memStream, decryptor, CryptoStreamMode.Read))
{
int byteCount = cryptoStream.Read(plainTextBytes, 0, plainTextBytes.Length);

return Encoding.UTF8.GetString(plainTextBytes, 0, byteCount);
}
}
}
}
}
}
}

关于c# - c#.net中的简单加密算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17549775/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com