Tag: cryptography

Metro WinRT应用程序中的AesManaged Decryption

我有一些文本,由C#的AesManaged加密,必须在WinRT Metro应用程序中解密。 我无法更改加密代码,因为代码具有其他无法更改的依赖项。 加密函数如下所示: // Note: Edited out possibly real password and salt: Guid password = Guid.Parse(“AAAAAAAAA-AAAA-AAAA-AAAA-AAAAAAAAAAAA”); Guid salt = Guid.Parse(“AAAAAAAAA-BBBB-BBBB-BBBB-AAAAAAAAAAAA”); string EncryptedValue(string data) { byte[] passwordBytes = password.ToByteArray(); byte[] saltBytes = salt.ToByteArray(); byte[] bKey = new byte[16]; for(int i = 0; i < 16; i++) { bKey[i] = passwordBytes[i]; } string encryptedData = String.Empty; […]

如何在.Net Core类库中使用Rijndael加密? (不是.Net Framework)

我们如何在.Net Core类库中使用Rijndael加密? (不是.Net Framework类库)我们需要创建一个共享的.Net Core库,用于多个项目,并且需要实现在项目中使用相同Rijndael加密的Encrypt和Decrypt方法。 我们目前正在使用: VS企业版2015 C# .Net核心类库 .NETStandard,Version = v1.6 reference 似乎.Net Core 1.0版本中缺少Rijndael和AES的实现…它似乎只包括基类。 我们如何获得Rijndael或AES加密的.Net Core实现作为新的.Net核心类库项目的参考? 以下是在.Net Framework 4.5.2中使用的Encrypt方法: public static string Encrypt(string valueToEncrypt, string symmetricKey, string initializationVector) { string returnValue = valueToEncrypt; var aes = new System.Security.Cryptography.RijndaelManaged(); try { aes.Key = ASCIIEncoding.ASCII.GetBytes(symmetricKey); aes.IV = ASCIIEncoding.ASCII.GetBytes(initializationVector); aes.Mode = CipherMode.CBC; aes.Padding = PaddingMode.ISO10126; var […]

TripleDES:指定密钥是’TripleDES’的已知弱密钥,无法使用

我正在使用.NET 3.0类System.Security.Cryptography.MACTripleDES类来生成MAC值。 不幸的是,我正在使用一个使用“ 1111111111111111 ”(作为hex)作为单长DES密钥的硬件设备。 System.Security.Cryptography库对密钥进行一些健全性检查,如果您尝试使用加密弱密钥,则返回Exception。 例如: byte[] key = new byte[24]; for (int i = 0; i < key.Length; i++) key[i] = 0x11; byte[] data = new byte[] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; byte[] computedMac = null; using (MACTripleDES mac = new MACTripleDES(key)) { computedMac = mac.ComputeHash(data); } 抛出一个例外 […]

如何在C#中使用公钥和私钥加密技术

我想使用公钥/私钥技术加密数据。 我的意思是,用接收器的公钥加密,接收器可以用自己的私钥解密。 我怎样才能做到这一点? 您有任何建议或示例代码吗?

.net中的混合密码系统实现。 错误指定密钥不是此算法的有效大小

我正在尝试实现https://en.wikipedia.org/wiki/Hybrid_cryptosystem中提到的混合密码系统 目前我实施了以下算法 private void button1_Click(object sender, EventArgs e) { CspParameters cspParams = new CspParameters { ProviderType = 1 }; RSACryptoServiceProvider rsaProvider = new RSACryptoServiceProvider(1024, cspParams); string publicKey = Convert.ToBase64String(rsaProvider.ExportCspBlob(false)); string privateKey = Convert.ToBase64String(rsaProvider.ExportCspBlob(true)); string symmericKey = “Kamran12”; txtEncryptedData.Text = EncryptData(txtInputData.Text, symmericKey); string encryptedsymmetrickey = EncryptData(symmericKey, publicKey); //error line //string decryptsymmetrickey = encryptedsymmetrickey + privateKey; //string […]

在C#中加载ASN.1 / DER编码的RSA密钥对

我在Crypto ++中创建了DER编码的RSA密钥对,以及密码。 它们是Base64Encoded字符串。 我首先将数据从Base64解码为字节数组,但我不知道如何将它们加载到RSACryptoServiceProvider 。 static void Main() { string pbkeystr = “mypublickey”; string pvkeystr = “myprivatekey”; string cipherstr = “mycipher”; byte[] pbkey = Convert.FromBase64String(pbkeystr); byte[] pvkey = Convert.FromBase64String(pvkeystr); byte[] cipher = Convert.FromBase64String(cipherstr); RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(); //Set keys here.. //Decrypt the cipher using private key rsa.Decrypt(pvkey, false); } 没有设置键的function。 我发现唯一的东西是ImportParameters方法,它采用RSAParameters类,它包括p , q , […]

RSACryptoServiceProvider使用自己的公钥和私钥进行初始化

我正在尝试使用自己的公钥和私钥初始化RSACryptoServiceProvider。 据我所知,这样做的方法是用构造函数调用 RSACryptoServiceProvider RSAalg = new RSACryptoServiceProvider(cspParams); cspParams如上所示。 但是,当我查看使用它的msdn示例时: http : //msdn.microsoft.com/en-us/library/ca5htw4f.aspx 我没有看到他们设置私钥或公钥的任何地方。 仅使用KeyContainer。 当我创建一个没有cspParam的RSACryptoServiceProvider时,它默认设置为仅使用公钥。 当我检查类本身的PublicOnly变量并且它是一个只读变量时,我注意到了这一点。 我的问题是如何初始化这个类,然后设置我自己的私钥和公钥。 服务器将使用私钥,客户端将拥有公钥。 我发现创建一个RSAParameter对象并将.Exponent和.Modulus参数分别设置为公共变量和私有变量。 但是我收到了“Missing Private Key”错误,因为我认为RSACryptoServiceProvider没有使用正确的构造函数进行初始化。 以下是我的一些代码。 不要担心BigInteger类,它只是一个实验。 即使我使用它,我也会得到同样的错误。 //Create a UnicodeEncoder to convert between byte array and string. UnicodeEncoding ByteConverter = new UnicodeEncoding(); byte[] dataToEncrypt = ByteConverter.GetBytes(password); byte[] encryptedData; byte[] decryptedData; //RSACryptoServiceProvider RSA = new RSACryptoServiceProvider(); RSAParameters rsap […]

如何在C#中将字符串转换为byte

如何从C#中的字符串中获取字节数组? 我想将一个字符串传递给这个方法 。

将ASN.1数据转换为公钥需要什么? 例如,我如何确定OID?

此代码与反垃圾邮件工作中使用的DKIM签名validation有关 。 我有来自s1024._domainkey.yahoo.com的byte[] ,它是ASN.1编码的,但我不知道是否仅包含足够的信息来实现公钥。 基于此类 ,我似乎可以将ASN.1密钥转换为X509Certificate公钥,但我需要提供OID和一些ASN.1编码的参数。 在这个例子中,我有ASN1密钥的元数据: RSA编码密钥(根据RFC3447,ASN.1 DER编码[ITU-X660-1997] RSAPublicKey) 与sha1 sha256哈希算法一起使用 使用与RFC3447的A.2节中的下表相关的OID(虽然我不知道如何将此信息转换为完整的OID) /* * 1.2.840.113549.1 * MD2 md2WithRSAEncryption ::= {pkcs-1 2} MD5 md5WithRSAEncryption ::= {pkcs-1 4} SHA-1 sha1WithRSAEncryption ::= {pkcs-1 5} SHA-256 sha256WithRSAEncryption ::= {pkcs-1 11} SHA-384 sha384WithRSAEncryption ::= {pkcs-1 12} SHA-512 sha512WithRSAEncryption ::= {pkcs-1 13} */ 代码示例 string pubkey = “MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDrEee0Ri4Juz+QfiWYui/E9UGSXau/2P8LjnTD8V4Unn+2FAZVGE3kL23bzeoULYv4PeleB3gfmJiDJOKU3Ns5L4KJAUUHjFwDebt0NP+sBK0VKeTATL2Yr/S3bT/xhy+1xtj4RkdV7fVxTn56Lb4udUnwuxK4V5b5PdOKj/+XcwIDAQAB”; byte[] pubkeyByteArray […]

要解密的数据长度无效

我正在尝试使用RijndaelManaged通过套接字加密和解密文件流,但我一直在碰到exception CryptographicException:要解密的数据长度无效。 在System.Security.Cryptography.RijndaelManagedTransform.TransformFinalBlock(Byte [] inputBuffer,Int32 inputOffset,Int32 inputCount) 在System.Security.Cryptography.CryptoStream.FlushFinalBlock() 在System.Security.Cryptography.CryptoStream.Dispose(布尔处理) 当整个文件被传输时,在receiveFile中的using语句结束时抛出exception。 我尝试在网上搜索,但只找到了在加密和解密单个字符串时使用编码时出现的问题的答案。 我使用FileStream,所以我没有指定要使用的任何编码,所以这不应该是问题。 这些是我的方法: private void transferFile(FileInfo file, long position, long readBytes) { // transfer on socket stream Stream stream = new FileStream(file.FullName, FileMode.Open); if (position > 0) { stream.Seek(position, SeekOrigin.Begin); } // if this should be encrypted, wrap the encryptor stream if (UseCipher) { stream […]