Tag: cryptography

JavaScript中的加密不会在C#中解密

我试图在JavaScript中使用RSA加密,然后在C#中解密它。 在JavaScript中我使用的是库jsencrypt。 在C#中我使用API​​“充气城堡”。 当我在同一种语言中进行加密/解密时,一切正常。 当我解密它时,我得到了正确的文本。 当我尝试在C#中解密用JavaScript加密的内容时,我什么都没有得到。 我确信两者之间的关键是相同的。 代码示例如下。 任何有关如何解决这个问题的帮助将不胜感激。 JavaScript的 //using jsencrypt.min.js var encrypt = new JSEncrypt(); encrypt.setPublicKey($(‘#pubkey’).val()); var encrypted = encrypt.encrypt($(‘#input’).val()); 从JavaScript中获取“加密”的值,并在C#中用于“encyp” AsymmetricCipherKeyPair KeyParameterPrivate; byte[] cipheredBytes = Convert.FromBase64String(encyp); string privateKeyFileName = @”C:\private.pem”; using (var fileStream2 = File.OpenText(privateKeyFileName)) { PemReader pemReader2 = new Org.BouncyCastle.OpenSsl.PemReader(fileStream2); KeyParameterPrivate = (Org.BouncyCastle.Crypto.AsymmetricCipherKeyPair)pemReader2.ReadObject(); } IAsymmetricBlockCipher cipher2 = new Org.BouncyCastle.Crypto.Engines.RsaEngine(); RsaKeyParameters privateKey2 […]

对象已存在于RSACryptoServiceProvider中

我将源代码从一个应用程序复制到另一个应用程序,两者都在同一台机器上运行。 我在两个应用程序中也使用下面的containerName相同的字符串。 是什么阻止我的新应用程序读取另一个应用程序中保存的密钥? 所有其他事情都是平等的,登录用户帐户等。 CspParameters cspParams = new CspParameters(); cspParams.KeyContainerName = containerName; cspParams.Flags = CspProviderFlags.UseMachineKeyStore; // Get error “object already exists” below. RSACryptoServiceProvider rsaKey = new RSACryptoServiceProvider(cspParams);

Aes解密器给出空字符串

我有AES加密/解密的问题。 注释的代码工作,但有时给出错误“填充无效,无法删除”所以我更改它,因为它在这里解释填充无效,无法删除exception,而使用“AesManaged”解密字符串C# 但是当我尝试它时,解密过程中的代码会给出一个空字符串。 我不知道哪里弄错了。 两个静态函数bytesToString和stringToBytes与加密无关,我在其他地方使用它们。 密钥长度和块大小是OKAY。 我在debbuger中找到了这个: “’csEncrypt.Length’引发了’System.NotSupportedException’类型的exception” 我在3.5 .NET Visual STudio 2008上工作 这是来自调试器的prtscr,因为你可以看到离开块后加密的是0字节长,而cryptostream有一些例外 从调试器打印屏幕 怎么解决? 请给我一些线索。 static class Aes { public static string bytesToHexString(byte[] key) { return BitConverter.ToString(key).Replace(“-“, String.Empty); } public static byte[] stringToBytes(string key) { return Enumerable.Range(0, key.Length) .Where(x => x % 2 == 0) .Select(x => Convert.ToByte(key.Substring(x, 2), 16)) .ToArray(); } public […]

C#无法生成初始化向量IV

当我尝试为TripleDES加密器创建IV初始化向量时,出现以下错误。 请参阅代码示例: TripleDESCryptoServiceProvider tripDES = new TripleDESCryptoServiceProvider(); byte[] key = Encoding.ASCII.GetBytes(“SomeKey132123ABC”); byte[] v4 = key; byte[] connectionString = Encoding.ASCII.GetBytes(“SomeConnectionStringValue”); byte[] encryptedConnectionString = Encoding.ASCII.GetBytes(“”); // Read the key and convert it to byte stream tripDES.Key = key; tripDES.IV = v4; 这是我从VS获得的例外。 指定的初始化向量(IV)与此算法的块大小不匹配。 我哪里错了? 谢谢

AES解密失败,“填充无效,无法删除”

我正在使用Java编写的服务器进行跨平台应用程序,所以我最终使用C#for Windows。 我终于在这两种语言中克服了BigIntegers不同字节的所有障碍(Java:big endian,C#:little),所以我也成功地进行了密钥交换。 现在这就是问题所在,在Java中我使用AES/CBC/PKCS5Padding进行加密,但在C#中没有可用的PKCS5, 但正如我在其他post中读到的这个主题在SO上,PKCS7被告知与PKCS5相同或者Java确实使用PKCS7而不是PKCS5。 我不知道什么是正确的。 所以这是代码: using (System.Security.Cryptography.RijndaelManaged rijndael = new System.Security.Cryptography.RijndaelManaged()) { byte[] iv = new byte[16]; for (int i = 0; i < 16; i++) iv[i] = 0; rijndael.Padding = PaddingMode.PKCS7; rijndael.Mode = CipherMode.CBC; rijndael.Key = Sys.PrivateKey; rijndael.KeySize = 128; rijndael.BlockSize = 128; rijndael.IV = iv; Sys.LogWrite("Decrypt input bytes length: " […]

如何用DES实现CBC-MAC?

我应该在C#中实现MAC-CBC生成方法,其中包含有关加密算法的一些信息。 这就是我所拥有的: 我应该使用DES。 关键是byte[] {11, 11, 11, 11, 11, 11, 11, 11} 数据(16字节)应以8字节部分加密。 前8个字节使用Instance Vector = new byte[8] (8个字节,0值)加密。 (CBC?) 加密值的最后8个字节应转换为hex字符串。 这是我应该发送的结果。 有了这些信息,我实现了以下方法: public static string Encrypt(byte[] data) { var IV = new byte[8]; var key = new byte[] { 11, 11, 11, 11, 11, 11, 11, 11 }; var result = new byte[16]; // […]

Rfc2898DeriveBytes(PBKDF2)实现中密钥大小的重要性

这是我使用.NET中提供的Rfc2898DeriveBytes类来“散列”(或导出 PKCS标准的PBKDF2实现中调用的密钥 )密码字符串的代码 : int saltSize = 256; int iterations = 1000; int keySize = 20; // The parameter I’m not sure of var deriveBytes = new Rfc2898DeriveBytes(“mypassword”, saltSize, iterations); byte[] salt = deriveBytes.Salt; byte[] key = deriveBytes.GetBytes(keySize); 现在,我知道盐的大小并不重要(只要它足以确保随机盐是独特的),但关键尺寸呢? 更长的密钥是否能提供更强的安全性来抵御攻 (笔记: 1.性能问题不在我这里导入,显然更长的盐或更长的密钥将花费更多的时间让GetBytes返回一个值。 2.我想使用这个“哈希”将它们存储在数据库中,而不是在加密方案中使用它们)

SHA256哈希值是否总共有64个字符?

我正在设置我的数据库以接收散列密码而不接受纯文本。 我会这样做吗? create table User( username varchar(20) not null, password varchar(64) not null, );

相当于openssl中的PasswordDeriveBytes

我有C#代码如下: private static string password = “Password”; private static string salt = “SALT”; private static string hashAlgorithm = “SHA1”; private static int iterations = 2; var saltValueBytes = Encoding.UTF8.GetBytes(salt); var passwordKey = new PasswordDeriveBytes(password, saltValueBytes, hashAlgorithm, iterations) … 我需要在Mac中实现相同的function,我才知道Opnessl实现了相关的方法(即libcrypto)。 Opnessl对上述代码的等效方法是什么?

使用C#将签名的SOAP消息创建为字符串

我需要调用Web服务,我必须使用C#发送下面的肥皂请求。 必须签署SoapBody和TimeStamp。 MIIFsDCCBawwggSUoAMCAQICBgCaWhnEajANBgkqhkiG9w0BAQsFADBcMQswCQYDVQQGEwJUUjFNMEsGA1UEAwxETWFsaSBNw7xow7xyIEVsZWt0cm9uaWsgU2VydGlmaWthIEhpem1ldCBTYcSfbGF5xLFjxLFzxLEgLSBTw7xyw7xtIDEwHhcNMT IZVrIpPCxiPcvyVOVv/d4nRPZWM= fltghgDztDtuVQX7y4t0ZJxAnxE= IOVXxBTp053aNJMbQj+VTiBblZ63peyJ1vWazKmEWNxN7RaeFfKELoxede8xQEqzSaB/u8exC7LLGYiEdChboVCf9liLMN4MmNj5JR6gfDrsL3azThf5hxLQ+WIE20PRoU6ozpp20zC1IaO3IU4ZaRLw 2014-12-08T21:26:36.191Z 2014-12-08T21:36:36.191Z 1234567 我创建了这个soap请求并通过使用带有私钥的证书的WCF客户端CustomBinding和.pfx文件获得了良好的响应。 有关签署soap消息的大多数示例都使用证书存储或pfx文件中的证书。 但在我的方案中,用户的证书(带有私钥)存储在智能卡上,无法导出证书私钥。 所以在这种情况下我不能使用WCF CustomBinding或者我不能使用SignedXml类来签署SOAP消息,因为当我尝试以编程方式获取证书时,则缺少私钥。 (此外,我通过使用NCryptoki – PKCS包装器获得了私钥,但是此私钥类型与RSA不同,我无法为WCF客户端或SignedXmlClass私钥设置。) 因此,我尝试将此SOAP消息创建为字符串,并使用智能卡手动创建DigestValues,BinarySecurityToken和SignatureValue。 我可以将BinarySecurityToken值计算为: var certificate = GetX5092Certificate(); // X5092 certificate on smart card without private key string binarySecToken= Convert.ToBase64String(certificate.RawData); 我也有一些代码来计算摘要值: byte[] dataToHashTS = Encoding.UTF8.GetBytes(TimeStampReference.OuterXml); XmlDsigExcC14NTransform transformDataTS = new XmlDsigExcC14NTransform(“wsse soap web”); transformDataTS.LoadInput(new MemoryStream(dataToHashTS)); byte[] bDigestDataTS = transformDataTS.GetDigestedOutput(SHA1Managed.Create()); string sDigestDataTS […]