Tag: encryption

Rijndael填充错误

您好我正在尝试通过Rijaendal加密/解密字符串。 我根本无法弄清楚为什么解密会爆炸。 我总是以不正确的填充错误结束。 抛弃我的一件事是我的加密结果,我将其作为HEX数组返回。 它的长度为14个字节。 在我的解密函数中,相同的字节数组在从HEX转换时最终具有16个字节。 任何帮助,将不胜感激: using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace rjandal { class Program { static void Main(string[] args) { string DataForEncrypting = “this is a test”; string key = string.Empty; string iv = string.Empty; using (System.Security.Cryptography.RijndaelManaged rmt = new System.Security.Cryptography.RijndaelManaged()) { rmt.KeySize = 256; rmt.BlockSize = 128; rmt.Mode […]

我们使用BouncyCastle API为客户端加密文件。 在尝试解密时,他从PGP获得了“仅供您选择”的消息。 为什么?

我们使用Bouncy.Castle C#API进行PGP加密。 我绝不是PGP加密专家和各种可用选项。 加密似乎运行正常,但是,当客户端尝试解密时,他说PGP不会输出到文件,只会输出到屏幕,因为它标记为“仅供您选择”。 这是–verbose消息: pgp –decrypt Client_FileExport_20110510_020011.zip.pgp Client_FileExport_20110511_132203.zip.pgp –info verbose McAfee E-Business Server v8.5 – Full License (c) 1991-2006 McAfee, Inc. All Rights Reserved. Setting temporary directory to C:\DOCUME~1\$963\LOCALS~1\Temp\ Decoding data…. event 1: initial event 13: BeginLex event 8: Analyze File is encrypted. event 9: Recipients Secret key is required to read it. Key […]

HMC SHA1哈希 – C#产生与Ruby不同的哈希输出

我正在努力为我正在使用的第三方服务快速获取一个bug .Net客户端库。 原始库(可以工作)是用Ruby编写的,但它们等效的DotNet库为Ruby库产生了不同的哈希输出。 Ruby加密代码如下: def self.encrypt_string(input_string) raise Recurly::ConfigurationError.new(“Recurly gem not configured”) unless Recurly.private_key.present? digest_key = ::Digest::SHA1.digest(Recurly.private_key) sha1_hash = ::OpenSSL::Digest::Digest.new(“sha1”) ::OpenSSL::HMAC.hexdigest(sha1_hash, digest_key, input_string.to_s) end (假设)等效的C#代码是: private static string ComputePrivateHash(string dataToProtect) { if(String.IsNullOrEmpty(Configuration.RecurlySection.Current.PrivateKey)) throw new RecurlyException(“A Private Key must be configured to use the Recurly Transparent Post API.”); byte[] salt_binary = SHA1.Create().ComputeHash(Encoding.ASCII.GetBytes(dataToProtect)); string salt_hex = BitConverter.ToString(salt_binary).Replace(“-“, “”).ToLower(); […]

C#AES Rijndael – 检测无效密码

我正在使用Rijndael来加密程序中的一些敏感数据。 当用户输入错误的密码时,大多数情况下会抛出CryptographicException ,并显示消息“填充无效且无法删除”。 但是,如果概率非常小,CryptStream不会使用错误的密码抛出exception,而是会返回错误解密的流。 换句话说,它解密为垃圾。 知道如何检测/防止这种情况吗? 我能想到的最简单的方法是在加密时在消息的开头添加一个“幻数”,并在解密后检查它是否仍在那里。 但如果有一种更简单的方法,我很乐意听到它!

c#中的数据加密和密钥管理

采取哪条路线,哪些是利弊,哪个更安全.. 1)生成AES密钥,用它加密数据,然后用RSA加密AES密钥,将加密数据和加密的AES密钥保存到文件,并将RSA密钥保存到KeyContainer。 2)或者使用DPAPI ProtectedData类加密数据并将其保存到文件中,然后将我使用的熵与ProtectedData.Protect()到某个地方..(也可以用RSA加密它,将RSA密钥对存储到KeyContainer以及带有数据的加密熵到文件?) 编辑:只是为了更多信息:我们需要保护我们的应用程序文件系统使用。 因此,应用程序存储到文件系统的任何文件,我们希望它被加密。 该文件很可能由同一应用程序或同一应用程序堆栈的另一个组件使用。

带有公钥的RSA C#加密用于PHP openssl_private_decrypt():Chilkat,BouncyCastle,RSACryptoServiceProvider

我正在尝试加密C#应用程序中的字符串,以便在PHP端使用openssl_private_decrypt()对其进行解密。 我试图解密的初始公钥是从PHP的openssl_pkey_get_details($ privateKey)中获得的; 提前说,我能够使用chilkat,但它在iOS下的单触function中无效,所以它对我来说没用(而且它的成本也相当高)。 有代码示例我是如何做到的: void TestEncryption(string publicKey, string data) { var bytes = Encoding.UTF8.GetBytes(data); //by using chilkat var key = new Chilkat.PublicKey(); var result = key.LoadOpenSslPem(publicKey); var ck = new Chilkat.Rsa(); ck.UnlockComponent(“blablabla”); var keyXml = key.GetXml(); ck.ImportPublicKey(keyXml); var ckBytes = ck.EncryptBytes(bytes, false); //by using BouncyCastle Object obj; using (TextReader sr = new StringReader(publicKey)) { […]

仅使用公钥创建AsymmetricCipherKeyPair

我有点问题。 我正在尝试编写客户端 – 服务器应用程序(更多是POC),客户端从服务器请求公钥,然后服务器生成此密钥AsymmetricCipherKeyPair ,具有以下内容 private static AsymmetricCipherKeyPair GenerateKeyPair() { RsaKeyPairGenerator g = new RsaKeyPairGenerator(); g.Init(new KeyGenerationParameters(new SecureRandom(), 1024)); var pair = g.GenerateKeyPair(); return pair; } 这生成正确,可以正确加密和加密(在服务器端,但这失败了目的) 然后我将一个序列化的公钥发送给客户端 private static byte[] SerialisePublic(AsymmetricCipherKeyPair keypair) { SubjectPublicKeyInfo publicKeyInfo = SubjectPublicKeyInfoFactory.CreateSubjectPublicKeyInfo(keypair.Public); byte[] serializedPublicBytes = publicKeyInfo.ToAsn1Object().GetDerEncoded(); return serializedPublicBytes; } private static void SendBytes(TcpClient client, byte[] send) { NetworkStream stream […]

C#中的RSA实现

我试图在C#中实现RSA算法。 下面的代码在p和q较小时起作用,但在尝试复制RSA-100或更大时p和q非常大时不起作用。 例如: p = 61, q = 53, n = 3233, phi(n) = 3120, e = 17, d = 2753 一旦解密,我得到正确的原始消息。 我从RSA维基百科页面获得了这些值。 该代码也适用于p和q的其他小值。 但是,当使用RSA-100或更高版本时,我不会收到原始邮件。 我已经尝试对指数(e)使用不同的值并确保它与phi(n)互质但我无法得到正确的结果。 我错过了一些简单/明显的东西吗? 预先感谢您的帮助! //p and q for RSA-100 //string p = “37975227936943673922808872755445627854565536638199”; //string q = “40094690950920881030683735292761468389214899724061”; string p = “61”; string q = “53”; //Convert string to BigInteger BigInteger rsa_p […]

C#中的DPAPI密码加密并保存到数据库中。然后使用密钥对其进行解密

我尝试过使用UTF8算法和SHA256进行密码加密,但建议不要使用它们。 相反,我被建议使用DPAPI。我浏览了一些谷歌的示例代码,这些代码并不清楚。 你能帮我解决DPAPI算法吗?

AES CMAC计算C#

我知道MAC是最后一个块加密的第一个字节,并且在这里找到了这个CMAC解释,但它有点难以理解。 也许已经有一些CMAC AES问题但我很抱歉我无法理解它。 任何人都可以解释如何计算CMAC? 如果需要,可以使用C#中的一些示例代码。 谢谢