标签: cryptostream

子类StreamReader创建解密文件流Reader

我试图通过继承StreamReader创建一个解密的文件流阅读器(DFSR)类,这样我就可以将带有encrpyted信息的文件名传递给它的(DFSR)构造函数,并返回我可以调用StreamReader的ReadLine方法的streamReader.

我知道如何做到如下,但我不知道如何将它折射成一个StreamReader作为父类的类.

using (Rijndael rijAlg = Rijndael.Create())
{
    rijAlg.Key = DX_KEY_32;
    rijAlg.IV = DX_IV_16;

    // Create a decrytor to perform the stream transform.
    using (FileStream fs = File.Open("test.crypt", FileMode.Open))
    {
        using (CryptoStream cs = new CryptoStream(fs, rijAlg.CreateDecryptor(), CryptoStreamMode.Read))
        {
            using (StreamReader sr = new StreamReader(cs))
            {
                string line;
                // Read and display lines from the file until the end of  
                // the file is reached. 
                while ((line = sr.ReadLine()) != null)
                {
                    Console.WriteLine(line);
                }
            }

        }
    }

}
Run Code Online (Sandbox Code Playgroud)

.net c# filestream cryptostream

6
推荐指数
1
解决办法
1152
查看次数

在VB.Net中进行简单的加密/解密

我试图找出如何在VB.Net中加密/解密字符串.

我按照这里给出的例子编写了下面的代码(如下).有一个文本框,一个"加密"按钮和一个"解密"按钮.想法是在文本框中键入内容("喜欢'hello world'"),单击"加密",然后在文本框中看到加密版本.单击"解密"应该会将您带回原始字符串.

但是当我尝试加密时,当我尝试"FlushFinalBlock"时出现错误.错误是:"要加密的数据长度无效".

"解密"部分是黑暗中的总镜头,因为上面引用的示例仅涉及加密,而不是解密.我确定这是错的,但由于我无法"加密"工作,我还没有测试过.

谁能告诉我为什么这不起作用?

Imports System.Data.SqlClient
Imports System.IO
Imports System.Security.Cryptography

Public Class Form1

  Private cryptObj As RijndaelManaged
  Private KEY_128 As Byte() = {42, 1, 52, 67, 231, 13, 94, 101, 123, 6, 0, 12, 32, 91, 4, 111, 31, 70, 21, 141, 123, 142, 234, 82, 95, 129, 187, 162, 12, 55, 98, 23}
  Private IV_128 As Byte() = {234, 12, 52, 44, 214, 222, 200, 109, 2, 98, 45, 76, 88, 53, 23, 78}
  Private …
Run Code Online (Sandbox Code Playgroud)

vb.net encryption rijndaelmanaged cryptostream

5
推荐指数
2
解决办法
5万
查看次数

使用C#CryptoStream的Java equilavent加密和解密字符串

我正在寻找用Java开发移动平台操作系统的应用程序.

我已经在C#WPF中为Windows环境开发了一个应用程序.我使用cryptostream以使用以下代码加密和解密字符串.下面显示的代码只是加密

public string encrypt(string encryptionString)
    {
        byte[] clearTextBytes = Encoding.UTF8.GetBytes(encryptionString);

        SymmetricAlgorithm rijn = SymmetricAlgorithm.Create();

        MemoryStream ms = new MemoryStream();
        byte[] rgbIV = Encoding.ASCII.GetBytes("ryojvlzmdalyglrj");
        byte[] key = Encoding.ASCII.GetBytes("hcxilkqbbhczfeultgbskdmaunivmfuo");
        CryptoStream cs = new CryptoStream(ms, rijn.CreateEncryptor(key, rgbIV), CryptoStreamMode.Write);

        cs.Write(clearTextBytes, 0, clearTextBytes.Length);

        cs.Close();

        return Convert.ToBase64String(ms.ToArray());
    }
Run Code Online (Sandbox Code Playgroud)

加密的字符串存储在在线数据库中.我需要做的是让java应用程序能够从数据库中读取字符串并使用C#应用程序中的相同加密密钥解密字符串.

谢谢你的帮助.

c# java encryption cryptostream

4
推荐指数
1
解决办法
9694
查看次数

C#从SQL Server EncryptByPassPhrase解密字节吗?

在C#中复制T-SQL DecryptByPassPhrase,我无法获得与MSSQL简单的加密在C#descrypt。某些列中的加密值是必需的,因为该表会定期导出到Excel和Access中,因此简单的加密足以“阻止”值,而无需开发人员去(重新)执行视图等工作。

在SQL Server 2012中:

    select EncryptByPassPhrase( N'hello' , N'world'  ) 
-- returns 0x01000000AA959FFB3A8E4B06B734051437E198C8B72000A058ACE91D617123DA102287EB
Run Code Online (Sandbox Code Playgroud)

在C#中:

byte[] buf = System.Text.Encoding.UTF8.GetBytes( "0x010000003A95FA870ED699A5F90D33C2BF01491D9132F61BA162998E96F37117AF5DA0905D51EB6FB298EC88" );
// bytes emitted from the database
var cp = new TripleDESCryptoServiceProvider();
var m = new MemoryStream(buf);
cp.Key = System.Text.Encoding.UTF8.GetBytes( "hello" ); // throws
cp.IV = System.Text.Encoding.UTF8.GetBytes( "hello" ); // throws
CryptoStream cs = new CryptoStream( m , cp.CreateDecryptor( cp.Key , cp.IV ) , CryptoStreamMode.Read );
StreamReader reader = new StreamReader( cs );
string plainText = reader.ReadToEnd();
Run Code Online (Sandbox Code Playgroud)

工作的C#代码应该是什么样的? …

sql-server encryption des cryptostream

4
推荐指数
2
解决办法
4803
查看次数

重用ICryptoTransform对象

我有一个用于加密文本数据的类。我正在尝试尽可能重用ICryptoTransform对象。但是,第二次尝试使用同一对象时,我得到了部分错误解密的数据。我认为第一个块是错误的,但其余的块似乎还可以(使用更长的文本进行了测试)。

我将类简化为以下内容:

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Security.Cryptography;
using System.Text;

namespace Sample.Crypto
{
    public class EncryptedStreamResolver : IDisposable
    {
        private AesCryptoServiceProvider _cryptoProvider;
        private ICryptoTransform _encryptorTransform;
        private ICryptoTransform _decryptorTransform;

        private ICryptoTransform EncryptorTransform
        {
            get
            {
                if (null == _encryptorTransform || !_encryptorTransform.CanReuseTransform)
                {
                    _encryptorTransform?.Dispose();
                    _encryptorTransform = _cryptoProvider.CreateEncryptor();
                }
                return _encryptorTransform;
            }
        }

        private ICryptoTransform DecryptorTransform
        {
            get
            {
                if (null == _decryptorTransform || !_decryptorTransform.CanReuseTransform)
                {
                    _decryptorTransform?.Dispose();
                    _decryptorTransform = _cryptoProvider.CreateDecryptor();
                }
                return _decryptorTransform;
            }
        }

        public EncryptedStreamResolver()
        {
            GenerateCryptoProvider(); …
Run Code Online (Sandbox Code Playgroud)

c# cryptography cryptostream .net-4.6.2

4
推荐指数
1
解决办法
840
查看次数

将数据附加到加密文件

我想使用 CryptoStream 将数据附加到已经加密的文件(AES、CBC 模式、填充 PKCS#7),而不需要读写整个文件。

例子:

旧内容: "Hello world..."

新内容: "Hello world, with appended text"

当然,我必须读取单个数据块,然后将其附加到已经存在的块中。在上面提到的示例中,我必须读取第一个块(14 个字节)中存在的字节数并将两个字节附加到第一个块,然后写入其余的附加文本

"Hello world, wi"
"th appended text"
Run Code Online (Sandbox Code Playgroud)

我面临的一个问题是我无法读取数据块中的字节数。有没有办法找出存在的字节数(在示例中为 14)?

另外我被卡住了,因为 CryptoStreamMode 只有读写成员,但没有更新。

有没有办法使用 CryptoStream 完成我想要的功能?

c# cryptostream

3
推荐指数
1
解决办法
1617
查看次数

C# 解密加密文件时出现“Bad Data”异常

嘿,我对加密和解密很陌生,说实话,甚至对 C# 语言也很陌生。基本上,我有一个 TCP 聊天服务器,可以“保存”日志并加密文本文件。这就是我加密的方式(基于 MSDN 示例):

public static void EncryptFile(string strInputFileName, string strOutputFileName, string strKey)
{
    FileStream fsIn = new FileStream(strInputFileName, FileMode.Open, FileAccess.Read);
    FileStream fsOut = new FileStream(strOutputFileName, FileMode.Create, FileAccess.Write);

    DESCryptoServiceProvider des = new DESCryptoServiceProvider();
    des.Key = ASCIIEncoding.ASCII.GetBytes(strKey);
    des.IV = ASCIIEncoding.ASCII.GetBytes(strKey);


    ICryptoTransform desencrypt = des.CreateEncryptor();
    CryptoStream cryptostream = new CryptoStream(fsOut, desencrypt, CryptoStreamMode.Write);

    byte[] byteArrayInput = new byte[fsIn.Length - 1];
    fsIn.Read(byteArrayInput, 0, byteArrayInput.Length);
    cryptostream.Write(byteArrayInput, 0, byteArrayInput.Length);

    fsIn.Close();
    fsOut.Close();
}
Run Code Online (Sandbox Code Playgroud)

该方法成功对文件进行完全加密。这是我的解密方法:

public static void DecryptFile(string strInputFileName, string strOutputFileName, string strKey)
{ …
Run Code Online (Sandbox Code Playgroud)

c# encryption file cryptostream

2
推荐指数
1
解决办法
1万
查看次数

CryptoStream:为什么要加密CryptoStreamMode.Write和要解密的CryptoStreamMode.Read?

设e ='password',我在CryptoStream中将其转换为'as9kio0736'.

设d ='as9kio0736',我将其转换为'CryptoStream中的密码'.

当我将d转换回'password'时,为什么不考虑在CryptoStream中写入?

using (MemoryStream msEncrypt = new MemoryStream()) {
    using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write)) {
        using (StreamWriter swEncrypt = new StreamWriter(csEncrypt)) {
            swEncrypt.Write(plainText);
        }
    }
}

using (MemoryStream msDecrypt = new MemoryStream(cipherText)) {
    using (CryptoStream csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read)) {
        using (StreamReader srDecrypt = new StreamReader(csDecrypt)) {
            plaintext = srDecrypt.ReadToEnd();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

c# encryption cryptostream

1
推荐指数
2
解决办法
4992
查看次数

将CryptoStream解密为MemoryStream

我已经编写了一个过程,在该过程中,将文件加密并上传到Azure,然后必须对下载过程进行解密,否则将失败,并显示“填充无效且无法删除”错误,或者“要解密的数据长度为无效。” 错误。

我已经尝试了许多在线解决方案,包括使用RijndaelManaged和CryptoStream解密C#mp3文件,但是它们似乎都不起作用,我最终只是在这两个错误之间来回跳动。加密过程使用的是解密使用的相同密钥/ IV对,并且由于它将解密一部分流,因此我感觉工作正常-最终会死于上述错误。

这是我的代码,有什么想法吗?请注意,三个变种(cryptoStream.CopyTo(decryptedStream)do {}while)不跑起来-他们在这里展示我已经尝试过的选项,所有这一切的失败。

byte[] encryptedBytes = null;

using (var encryptedStream = new MemoryStream())
{
    //download from Azure
    cloudBlockBlob.DownloadToStream(encryptedStream);

    //reset positioning for reading it back out
    encryptedStream.Position = 0;

    encryptedBytes = encryptedStream.ConvertToByteArray();
}

//used for the blob stream from Azure
using (var encryptedStream = new MemoryStream(encryptedBytes))
{
    //stream where decrypted contents will be stored
    using (var decryptedStream = new MemoryStream())
    {
        using (var aes = new RijndaelManaged { KeySize = …
Run Code Online (Sandbox Code Playgroud)

c# encryption aes cryptostream azure-storage-blobs

0
推荐指数
1
解决办法
8830
查看次数

如何将此C#加密函数转换为Java?

我需要将下面的C#代码翻译成Java,但是,我找不到任何与C#的Rfc2898DerivedBytes和Rijndael相当的Java.

    private static string Encrypt(string sData, string sEncryptionKey)
{
    string str = null;
    string str2;
    try
    {
        Rfc2898DeriveBytes bytes = new Rfc2898DeriveBytes(sEncryptionKey, 8);
        Rijndael rijndael = Rijndael.Create();
        rijndael.IV = bytes.GetBytes(rijndael.BlockSize / 8);
        rijndael.Key = bytes.GetBytes(rijndael.KeySize / 8);
        byte[] buffer = Encoding.Unicode.GetBytes(sData);
        using (MemoryStream stream = new MemoryStream())
        {
            using (CryptoStream stream2 = new CryptoStream(stream, rijndael.CreateEncryptor(), CryptoStreamMode.Write))
            {
                stream.Write(bytes.Salt, 0, bytes.Salt.Length);
                stream2.Write(buffer, 0, buffer.Length);
                stream2.Close();
                str = Convert.ToBase64String(stream.ToArray());
                str2 = str;
            }
        }
    }
    catch (Exception exception)
    {
       System.out.println(exception.getMessage());
    }
    return …
Run Code Online (Sandbox Code Playgroud)

java encryption rijndael cryptostream rfc2898

-1
推荐指数
1
解决办法
3170
查看次数