Tag: 加密

RSA Exception {“Bad Length。\ r \ n”} Noi Matter我的密钥大小是多少

我在行上收到运行时错误{“Bad Length。\ r \ n”}: return rsa.Encrypt(bytes, true); 这是在function: private static byte[] Encrypt(byte[] bytes) { using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider()) { string test = Properties.Settings.Default.PublicKeyXml; rsa.FromXmlString(“mfXS3Na0XfkjhpjS3sL5XcC9o+j6KXi1LB9yBc4SsTMo1Yk/pFsXr74gNj4aRxKB45+hZH/lSo933NCDEh25du1iMsaH4TGQNkCqi+HDLQjOrdXMMNmaQrLXGlY7UCCfFUnkEUxX51AlyVLzqLycaAt6zm5ljnDXojMC7JoCrTM=AQAB”); return rsa.Encrypt(bytes, true); } } 我使用的密钥大小为8192: CspParameters cspParams = new CspParameters(); cspParams.KeyContainerName = “XML_ENC_RSA_KEY”; RSACryptoServiceProvider rsaKey = new RSACryptoServiceProvider(8192, cspParams); string keyXml = rsaKey.ToXmlString(true); XML文件很小。 根据运行时的长度,它只有225个字节: string fileName […]

“填充无效,无法删除” – 这段代码有什么问题?

每次运行和加密时,输出都是可变的,当我尝试解密时,我得到“填充无效且无法删除”。 现在和这一天打了一两天,我不知所措。 private static string strIV = “abcdefghijklmnmo”; //The initialization vector. private static string strKey = “abcdefghijklmnmoabcdefghijklmnmo”; //The key used to encrypt the text. public static string Decrypt(string TextToDecrypt) { return Decryptor(TextToDecrypt); } private static string Encryptor(string TextToEncrypt) { //Turn the plaintext into a byte array. byte[] PlainTextBytes = System.Text.ASCIIEncoding.ASCII.GetBytes(TextToEncrypt); //Setup the AES providor for […]

C#和PHP中的TripleDES加密不一样(PKCS7,ECB)?

我花了几个小时试图解决这个问题,但我无法让它发挥作用。 我有一个C#加密例程,我需要在php中匹配。 我不能改变C#版本,这不是一个选项(第三方对此很坚定)。 这是C#代码: //In C# // Console.WriteLine(ApiEncode(“testing”, “56dsfkj3kj23asdf83kseegflkj43458afdl”)); // Results in: // XvHbR/CsLTo= public static string ApiEncode(string data, string secret) { byte[] clear; var encoding = new UTF8Encoding(); var md5 = new MD5CryptoServiceProvider(); byte[] key = md5.ComputeHash(encoding.GetBytes(secret)); TripleDESCryptoServiceProvider des = new TripleDESCryptoServiceProvider(); des.Key = key; des.Mode = CipherMode.ECB; des.Padding = PaddingMode.PKCS7; byte[] input = […]

将加密密钥和IV存储/转换为字符串

我一直在研究很多不同的C#加密示例。 在大多数示例中,加密密钥以及初始化向量(IV)作为字节数组传递到加密/解密方法中。 我想将Key和IV存储为字符串。 硬件安全模块中的密钥和作为SQL Server数据库中的nvarchar的IV。 我一直在讨论如何正确地将Key和IV转换为字符串的问题。 一些示例说使用Base64编码,而其他示例使用Encoding.UTF8 。 这是一个生成IV并将其转换为Base64字符串的示例… using (var aesProvider = new AesCryptoServiceProvider()) { aesProvider.GenerateIV(); var ivBase64 = Convert.ToBase64String(aesProvider.IV); return ivBase64; } 但是,当我将此字符串表示forms传递给加密方法然后将其转换回字节数组时,以下代码无法说明IV的大小不合适。 byte[] initVectorBytes = Encoding.UTF8.GetBytes(initializationVector);` // intermediate code excluded for brevity ICryptoTransform encryptor = symmetricKey.CreateEncryptor(keyBytes, initVectorBytes); 是否有一种在字节数组和字符串表示之间来回转换加密密钥和IV的标准方法?

密码加密

我正在为C#中的应用程序创建登录屏幕。 在我的登录屏幕中,我正在从数据库中读取用户名和密码,并检查输入的用户名和密码是否正确。 当我从数据库中读取密码时,我需要密码才能加密。 任何人都可以解释加密和解密的工作原理。 是否必须将加密值存储在数据库中以供读取。 现在我有两个字段 column names: username password values: admin password 我应该将密码的加密值存储在登录表的另一个字段中吗?

加密字符串从Delphi到C#

我试图用Delphi Encryption Compendium中的Cipher1 3.0,第一部分解密在Delphi中加密的c#中的一个字符串。 我使用TCipher_Rijndael。 我加密的字符串是:this-is-a-test-example 密码:通过 加密值为:iKBC8kX4ZEk4A1pCj6jwEegqjpxhqw == 当我尝试在c#中解密时,我发现错误:要解密的数据长度无效。 有没有人有同样的问题,什么是解决方案? 这是c#中的解密方法: public static byte[] Decrypt(byte[] cipherData, byte[] Key, byte[] IV) { MemoryStream ms = new MemoryStream(); Rijndael alg = Rijndael.Create(); alg.Key = Key; alg.IV = IV; CryptoStream cs = new CryptoStream(ms, alg.CreateDecryptor(), CryptoStreamMode.Write); cs.Write(cipherData, 0, cipherData.Length); cs.Close(); byte[] decryptedData = ms.ToArray(); return decryptedData; } […]

操作数类型冲突:varchar与尝试插入加密数据库的varchar(50)不兼容

我收到一个SqlException : 操作数类型冲突:varchar与使用加密的varchar(50)不兼容(encryption_type =’DETERMINISTIC’,encryption_algorithm_name =’AEAD_AES_256_CBC_HMAC_SHA_256’,column_encryption_key_name =’CEK_Auto1’,column_encryption_key_database_name =’PB’)collat​​ion_name =’SQL_Latin1_General_CP1_CI_AS’\ r \ n无正确的参数加密从客户端收到元数据。 在调用批处理期间发生错误,因此客户端可以通过调用sp_describe_parameter_encryption刷新参数加密元数据并重试。 我的C#代码: using (var connection = new SqlConnection(GetConnectionString())) { using (var cmd = new SqlCommand(“Clients_Insert”, connection)) { cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.Add(“@Email”, SqlDbType.VarChar, 50).Value = client.Email; cmd.Parameters.Add(“@ContactPerson”, SqlDbType.VarChar, 400).Value = client.ContactPerson; connection.Open(); cmd.ExecuteNonQuery(); } } 和我的存储过程: ALTER PROCEDURE [dbo].[Clients_Insert] @Email VARCHAR(50), @ContactPerson VARCHAR(400) AS BEGIN […]

将数字加密到另一个相同长度的数字

我需要一种方法来取12位数字并将其加密到不同的12位数字(除了0123456789之外没有其他字符)。 然后在稍后我需要能够将加密的数字解密回原始号码。 重要的是,如果2个加密数字是有序的,则不明显。 因此,例如,如果我加密0000000000001,加密时它应该看起来完全不同于000000000002.它不一定是世界上最安全的东西,但越安全越好。 我一直在四处寻找,但没有找到任何看起来非常合适的东西。 从我所看到的某些类型的XOR可能是最简单的方法,但我不知道如何做到这一点。 谢谢,吉姆

可以返回CryptoStream并且仍然可以正确处理所有内容吗?

如果我有一个我想传递给用户的CryptoStream ,那么天真的方法就是 public Stream GetDecryptedFileStream(string inputFile, byte[] key, byte[] iv) { var fsCrypt = new FileStream(inputFile, FileMode.Open, FileAccess.Read, FileShare.Read); var rmCrypto = new RijndaelManaged(); var transform = rmCrypto.CreateDecryptor(key, iv); var cs = new CryptoStream(fsCrypt, transform, CryptoStreamMode.Read); return cs; } 我知道当我处理CryptoStream ,底层的FileStream 也将被处理掉 。 我正在运行的问题是我如何处理rmCrypto和transform ? RijndaelManaged和ICryptoTransform是一次性类,但处理流不会处理这两个对象。 处理这种情况的正确方法是什么?

C#connectionString加密问题

我正在学习如何为我们的C#(3.5)应用程序加密ConnectionString。 我阅读了关于保护连接字符串的.Net Framwork开发人员指南( http://msdn.microsoft.com/en-us/library/89211k9b(VS.80).aspx )。 但没有完全理解内容。 它说“ The connection string can only be decrypted on the computer on which it was encrypted.” 我们有一个发布机器,它将构建我们的应用程序,它将生成OurApp.exe.config,然后将其安装到许多产品机器上。 那是不是我们必须将这个加密过程与我们的应用程序分开并在单独的产品机器上运行? 我们可以使用“ RSAProtectedConfigurationProvider ”。 它提到我们需要该提供商的encryption key 。 何时以及如何提供加密密钥? 谢谢,