Tag: 密码学

Rfc2898 / PBKDF2与SHA256作为c#中的摘要

我想在c#中使用Rfc2898来获取密钥。 我还需要使用SHA256作为Rfc2898的摘要。 我找到了类Rfc2898DeriveBytes ,但它使用SHA-1,我没有看到让它使用不同的摘要的方法。 有没有办法在带有SHA256的c#中使用Rfc2898作为摘要(从头开始实现它)?

加密许可证文件的有效方法?

对于Web应用程序,我想创建一个简单但有效的许可系统。 在C#中,这有点困难,因为任何安装了Reflector的人都可以查看我的解密方法。 有哪些方法可以加密C#中相当防篡改的文件?

C#RSA加密 – > PHP RSA解密

我试图在C#中使用RSA加密AES密钥和IV,并使用phpseclib用PHP解密它们。 我试图解决这个问题大约4个小时,但我总是得到’2495行的解密错误’。 PKCS似乎有问题。 临时私钥 临时公钥 在C#中使用RSA加密后的密文(decrypted =“testkey”,因为我删除了用于测试的aes加密) Cd/RsiVqKnEP2T9oTgnvRuHVKY09VfynLHIlinIGtW4PFrB2kKffIrIqRQKhob6bPIR4efjxhCn43AQ2gE5P/AMG/EDWk9HMJF8XuhdtsWfPmnqxVV4crpA2FZwh4BWdXq4N70ieWbuk+pRJ1dHGhLgFfphp4sVVopn3bPKw2VKI0O+MT4nUCHFac25owoFnMULzuxj60I9Qa/TIlCKwMNcv2r7ili/LvplPZIEnH2p/bR62TAUvty0yo9NTHZm+wlqyIUmA1/GrM0VHjmcnRjFQHp1zQreRspvRsbk= PHP(如果strrev与否,则无变化): public function RSADecryption($key, $iv) { $PrivateKeyFile = RSA_Private; $rsa = new Crypt_RSA(); $rsa->setEncryptionMode(CRYPT_RSA_ENCRYPTION_PKCS1); $rsa->loadKey($PrivateKeyFile); // decrypt key and iv for aes decryption $aes_key = base64_encode($rsa->decrypt(strrev((base64_decode($key))))); $aes_iv = base64_encode($rsa->decrypt(base64_decode($iv))); echo $aes_key; echo “”; echo $aes_iv; } C#加密: public static string RSAEncryption(string aes_key, string aes_iv, string publickey) { […]

使用Google服务帐户私钥签名数据失败

我无法使用从Google Developer Console下载的Service Application私钥对数据进行签名。 我收到以下错误: OAuthTests.TestCrypto.testSha256SignWithGoogleKey: System.Security.Cryptography.CryptographicException : Invalid algorithm specified. at System.Security.Cryptography.CryptographicException.ThrowCryptogaphicException(Int32 hr) at System.Security.Cryptography.Utils._SignValue(SafeKeyHandle hKey, Int32 keyNumber, Int32 calgKey, Int32 calgHash, Byte[] hash, Int32 dwFlags) at System.Security.Cryptography.RSACryptoServiceProvider.SignHash(Byte[] rgbHash, String str) at OAuthTests.TestCrypto.testSha256SignWithGoogleKey() in e:\Development\MiscellaneousProjects\RSSNewsFeeder\Oauth\OAuthTests.cs:line 43 是的,我之前已经问过这个问题,但没有得到太多的帮助,因为Stack的论坛模型不容易添加到现有的线程上,似乎我最好的改写问题就是做到这一点; 改写并提出一个新问题。 我写了三个unit testing(下面的代码)。 第一个unit testing显示我可以使用带有SHA256的RSACryptoServiceProvider对数据进行签名和validation,但此测试不使用我的Google证书的私钥。 当我使用Google的私钥证书和测试(下面的第二个测试)时,代码错误(上面的错误消息)。 第3次测试演示了使用Google的私钥并使用SHA1进行测试,这有效! 但根据规格无效。 以下代码是否有问题,或者证书有问题,或者可能是我的操作系统或其他环境问题? 我正在Windows 8.1机器上使用Windows C#3.5进行开发。 **这个工作** 不使用Google证书 var cert = […]

无法解密第二台计算机上的数据

我有两个应用程序,服务器和客户端,一个从一台机器运行,另一个从第二台机器运行,服务器使用WebSocket连接传递数据,数据在发送到客户端之前被加密,数据使其成为客户端应用程序正确,但我正在尝试使用相同的安全方法和密钥解密它,但我不会工作,它只在两个应用程序从同一台计算机运行时解密它。 有没有人知道它们从同一台机器运行时为什么会起作用,而不是从单独的机器运行它们时呢? 服务器和客户端应用程序都使用相同的安全方法。 using System.Security.Cryptography; // ENCRYPT static byte[] entropy = System.Text.Encoding.Unicode.GetBytes(“MY SECRET KEY HERE”); public static string EncryptString(System.Security.SecureString input) { byte[] encryptedData = System.Security.Cryptography.ProtectedData.Protect( System.Text.Encoding.Unicode.GetBytes(ToInsecureString(input)), entropy, System.Security.Cryptography.DataProtectionScope.CurrentUser); return Convert.ToBase64String(encryptedData); } public static SecureString DecryptString(string encryptedData) { try { byte[] decryptedData = System.Security.Cryptography.ProtectedData.Unprotect( Convert.FromBase64String(encryptedData), entropy, System.Security.Cryptography.DataProtectionScope.CurrentUser); return ToSecureString(System.Text.Encoding.Unicode.GetString(decryptedData)); } catch { return new SecureString(); } […]

如何从PEM文件中使用rsa解密

我正在使用以下c#代码使用带有PEM文件的rsa进行加密和解密: public string encrypt(string elementToEncrypt, string pathPrivateKey) { string pem = System.IO.File.ReadAllText(pathPrivateKey); byte[] Buffer = getBytesFromPEMFile(pem, “PUBLIC KEY”); System.Security.Cryptography.RSACryptoServiceProvider rsa = new System.Security.Cryptography.RSACryptoServiceProvider(); System.Security.Cryptography.RSAParameters rsaParam = rsa.ExportParameters(false); rsaParam.Modulus = Buffer; rsa.ImportParameters(rsaParam); byte[] encryptedMessageByte = rsa.Encrypt(Convert.FromBase64String(elementToEncrypt),false); return Convert.ToBase64String(encryptedMessageByte); } public string decrypt(string elementToDesencrypt, string pathPublicKey) { string pem = System.IO.File.ReadAllText(pathPublicKey); byte[] Buffer = getBytesFromPEMFile(pem, “RSA PRIVATE […]

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 […]

使用本机C#创建ECC专用/公钥

关于如何生成公钥和私钥ECC密钥对,我一直在谷歌和微软的Crypto API上花了好几个小时。 ECDiffieHellmanCng类( http://msdn.microsoft.com/en-us/library/system.security.cryptography.ecdiffiehellmancng.aspx#Y3081 )列出了一个示例,但我不知道如何直接访问私钥。 对于该程序的一些背景知识,它是一个C#控制台应用程序,用于管理TrueCrypt会话,AES预共享密钥加密和ECDH / AES加密。 我需要一个函数来创建一个公钥/私钥对以保存到文件,然后记录如何在包装的AES加密文件中使用这些生成的密钥(而不是像运行示例所示在运行时生成它)。 此外,我知道将文件保存到硬盘驱动器时出现的所有漏洞,但我并不担心这个程序,我正在考虑2台客户端计算机是安全的。 另请注意,我不想使用BouncyCastle API。

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 = […]

使用加密后,在终结器线程中获取“ReleaseHandleFailed”MDA

我在循环中第二次运行此代码后获得了MDA(使用不同的file参数: byte[] encryptedData = File.ReadAllBytes(file); // before this line it throws, see exception below long dataOffset; using (var stream = new MemoryStream(encryptedData)) using (var reader = new BinaryReader(stream)) { // … read header information which is not encrypted } using (var stream = new MemoryStream(encryptedData)) { stream.Seek(dataOffset, SeekOrigin.Begin); using (var aesAlg = new AesCryptoServiceProvider()) using […]