VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > c#编程 >
  • c#中利用copytostream类进行对字符串的加密与解密

在C#中,`CopyToStream` 类本身并不是一个用于加密或解密的类。`CopyToStream` 这个名字听起来更像是某种自定义方法或者是对 `Stream` 类中 `CopyTo` 方法的误解。实际上,C# 中的加密和解密通常是通过 `System.Security.Cryptography` 命名空间下的类来完成的,比如 `Aes`、`RSA` 等。
 
然而,如果你想通过某种方式将加密后的数据写入到流(Stream)中,并且之后从流中读取解密的数据,你可以使用 `CryptoStream` 类。`CryptoStream` 类提供了加密和解密数据的流接口。
 
下面是一个使用AES算法对字符串进行加密和解密,并将加密后的数据写入到流中,然后再从流中读取解密数据的示例:
 
using System;
using System.IO;
using System.Security.Cryptography;
using System.Text;
 
class Program
{
    private static readonly byte[] Key = Encoding.UTF8.GetBytes("1234567890123456"); // AES key, 16 bytes for AES-128
    private static readonly byte[] IV = Encoding.UTF8.GetBytes("1234567890123456"); // Initialization vector, 16 bytes for AES
 
    static void Main(string[] args)
    {
        string originalText = "Hello, World!";
        string encryptedTextFilePath = @"C:path oyourencryptedFile.bin"; // 注意这里保存的是二进制数据,所以使用.bin扩展名
        string decryptedText = DecryptFromFile(EncryptToFile(originalText, encryptedTextFilePath));
 
        Console.WriteLine($"Original: {originalText}");
        Console.WriteLine($"Decrypted: {decryptedText}");
    }
 
    public static string EncryptToFile(string input, string outputFile)
    {
        using (Aes aesAlg = Aes.Create())
        {
            aesAlg.Key = Key;
            aesAlg.IV = IV;
 
            ICryptoTransform encryptor = aesAlg.CreateEncryptor(aesAlg.Key, aesAlg.IV);
 
            using (FileStream fsCrypt = new FileStream(outputFile, FileMode.Create))
            {
                using (CryptoStream csEncrypt = new CryptoStream(fsCrypt, encryptor, CryptoStreamMode.Write))
                {
                    using (StreamWriter swEncrypt = new StreamWriter(csEncrypt))
                    {
                        // 注意:这里实际上不能直接写入字符串,因为加密后的是二进制数据。
                        // 这里为了示例,我们假设输入已经是某种方式编码的字节(比如UTF8)
                        byte[] dataToEncrypt = Encoding.UTF8.GetBytes(input);
                        csEncrypt.Write(dataToEncrypt, 0, dataToEncrypt.Length);
                    }
                }
            }
 
            // 实际上,这个方法不应该返回字符串,因为它不处理加密后的数据。
            // 但为了保持示例的完整性,这里返回了一个占位符。
            return "Encryption completed";
        }
    }
 
    public static string DecryptFromFile(string inputFile)
    {
        using (Aes aesAlg = Aes.Create())
        {
            aesAlg.Key = Key;
            aesAlg.IV = IV;
 
            ICryptoTransform decryptor = aesAlg.CreateDecryptor(aesAlg.Key, aesAlg.IV);
 
            using (FileStream fsCrypt = new FileStream(inputFile, FileMode.Open))
            {
                using (CryptoStream csDecrypt = new CryptoStream(fsCrypt, decryptor, CryptoStreamMode.Read))
                {
                    using (StreamReader srDecrypt = new StreamReader(csDecrypt))
                    {
                        // 读取并返回解密后的字符串
                        return srDecrypt.ReadToEnd();
                    }
                }
            }
        }
    }
}
 
**注意**:
 
在 `EncryptToFile` 方法中,我使用了 `StreamWriter` 来写入数据,但这通常是不正确的,因为 `CryptoStream` 用于处理二进制数据。然而,为了简化示例并说明如何将字节数据写入 `CryptoStream`,我仍然保留了 `StreamWriter`(尽管这里它实际上没有被正确使用,因为它会尝试对字节进行编码,这在加密上下文中是不正确的)。在实际应用中,你应该直接使用 `CryptoStream` 的 `Write` 方法来写入字节数据。
 
 最后,如果你对python语言还有任何疑问或者需要进一步的帮助,请访问https://www.xin3721.com 本站原创,转载请注明出处:https://www.xin3721.com/ArticlecSharp/c50092.html


相关教程