Tag: cryptography

.NET中的RSA密钥指数是否有限制?

使用C#我无法导入指数为{1,0,0,0,15}的公共RSA密钥:有一个例外: System.Security.Cryptography.CryptographicException was caught HResult=-2146893819 Message=Bad Data. Source=mscorlib StackTrace: at System.Security.Cryptography.CryptographicException.ThrowCryptographicException(Int32 hr) at System.Security.Cryptography.Utils._ImportKey(SafeProvHandle hCSP, Int32 keyNumber, CspProviderFlags flags, Object cspObject, SafeKeyHandle& hKey) at System.Security.Cryptography.RSACryptoServiceProvider.ImportParameters(RSAParameters parameters) at TestRSA.Form1.buttonTest_Click(Object sender, EventArgs e) in c:\Users\Thomas\Documents\Visual Studio 2010\Projects\Modules\TestRSA\Form1.cs:line 32 二手代码: RSACryptoServiceProvider rsaAlg = new RSACryptoServiceProvider(); RSAParameters key = new RSAParameters(); key.Exponent = new byte[5] { 1, 0, 0, […]

错误的PKCS7填充错误:无效长度106

我正在尝试使用以下函数进行加密和解密,但是,它会导致填充错误。 如果我将PaddingMode设置为None ,则会在Log中返回一些字母字符和随机符号。 我可能会错过设置正确结构的内容,如下所示: Cipher Rijndael(AES) 块大小128位(16字节) 模式CBC(密码块链接)密钥 MD5哈希密码 IV与密钥相同 数据编码Base64字符 UTF-8编码 任何帮助修复此错误以及确保满足上述结构的任何帮助将不胜感激! 谢谢 错误 CryptographicException: Bad PKCS7 padding. Invalid length 106. Mono.Security.Cryptography.SymmetricTransform.ThrowBadPaddingException (PaddingMode padding, Int32 length, Int32 position) (at /Users/builduser/buildslave/monoAndRuntimeClassLibs/build/mcs/class/corlib/Mono.Security.Cryptography/SymmetricTransform.cs:363) Mono.Security.Cryptography.SymmetricTransform.FinalDecrypt (System.Byte[] inputBuffer, Int32 inputOffset, Int32 inputCount) (at /Users/builduser/buildslave/monoAndRuntimeClassLibs/build/mcs/class/corlib/Mono.Security.Cryptography/SymmetricTransform.cs:515) Mono.Security.Cryptography.SymmetricTransform.TransformFinalBlock (System.Byte[] inputBuffer, Int32 inputOffset, Int32 inputCount) (at /Users/builduser/buildslave/monoAndRuntimeClassLibs/build/mcs/class/corlib/Mono.Security.Cryptography/SymmetricTransform.cs:554) System.Security.Cryptography.RijndaelManagedTransform.TransformFinalBlock (System.Byte[] inputBuffer, Int32 inputOffset, Int32 […]

是否可以在不使用KeyContainerName的情况下签署xml文档?

我想创建2个非常简单的dll: 1)将签署一个xml文档2),它将检查xml文档是否未被修改。 我尝试使用RSACryptoServiceProvider和一个密钥容器。 但是当我移动到另一台机器时,这不起作用,因为钥匙存储在机器中。 我想将密钥存储在我创建的dll中(我知道这不是推荐的)但是我无法弄清楚如何编写一些代码来简单地签署一个xml文档然后validation它没有被更改。 所以我需要使用对称密钥来做我想要的这可能吗? 皮特

从cryptostream读取到流的末尾

我在使用下面的代码时遇到了一些麻烦。 我有一个临时位置的文件,需要加密,此function加密该数据,然后存储在“pathToSave”位置。 在检查时似乎没有正确处理整个文件 – 我的输出中缺少一些位,我怀疑它与while循环没有贯穿整个流有关。 顺便说一句,如果我尝试在while循环后调用CryptStrm.Close(),我会收到exception。 这意味着如果我尝试解密文件,我会得到一个已经在使用的文件错误! 尝试了所有平常和我在这里看到类似的问题,任何帮助都会很棒。 谢谢 public void EncryptFile(String tempPath, String pathToSave) { try { FileStream InputFile = new FileStream(tempPath, FileMode.Open, FileAccess.Read); FileStream OutputFile = new FileStream(pathToSave, FileMode.Create, FileAccess.Write); RijndaelManaged RijCrypto = new RijndaelManaged(); //Key byte[] Key = new byte[32] { … }; //Initialisation Vector byte[] IV = new byte[32] { … […]

使用OpenSSL进行AES-256 / CBC加密并使用C#进行解密

我是密码学的新手。 我的要求是使用openssl解密/加密加密/解密的文本。 我们使用的算法是Openssl中的aes-256-cbc。 所以,我试图在我的应用程序中实现相同的function。 到目前为止,经过大量的谷歌搜索,我所能做的就是…… 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 our purposes. AesCryptoServiceProvider aesProvider = new AesCryptoServiceProvider(); aesProvider.BlockSize = 128; aesProvider.KeySize = 256; //My key and iv that i have used in openssl aesProvider.Key = System.Text.Encoding.ASCII.GetBytes(strKey); aesProvider.IV = […]

UWP ECDSP签名

我想用这段代码制作一个ECDSA签名: AsymmetricKeyAlgorithmProvider objAsymmAlgProv = AsymmetricKeyAlgorithmProvider.OpenAlgorithm(AsymmetricAlgorithmNames.EcdsaSha256); CryptographicKey keypair = objAsymmAlgProv.CreateKeyPairWithCurveName(EccCurveNames.SecP256r1); BinaryStringEncoding encoding = BinaryStringEncoding.Utf8; buffMsg = CryptographicBuffer.ConvertStringToBinary(“Test Message”, encoding); IBuffer buffSIG = CryptographicEngine.Sign(keypair, buffMsg); byte [] SignByteArray = buffSIG.ToArray(); bool res = CryptographicEngine.VerifySignature(keypair, buffMsg, buffSIG); VerifySignature始终返回true,这没关系。 但我在签名方面遇到了一些问题。 为什么签名长度( SignByteArray )已修复? (0x40字节)。 为什么SignByteArray [0]和SignByteArray [2]值不正确? (我认为它们应该是0x30和0x02) 我期待像https://kjur.github.io/jsrsasign/sample-ecdsa.html这样的东西

为什么RSAParameters模数不等于P和Q的乘积?

P和Q的值与.Net RSAParameters的模数值不匹配。 根据RSA算法和MSDN文档,它应该是:P * Q =模数 我生成了一个512位RSA密钥对,并通过调用将其导出为XML: RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(512); rsa.ToXmlString(true); 这给了我以下XML: rcLI1XTfmXtX05zq67d1wujnUvevBu8dZ5Q5uBUi2mKndH1FZLYCKrjFaDTB/mXW1l5C74YycVLS6msY2NNJYw== AQAB 1dwGkK5POlcGCjQ96Se5NSPu/hCm8F5EYwyqRpLVzgk= 0AAEMHBj7CP2XHfCG/RzGldw1GdsW13rTo3uEE9Dtws= PO4jMLV4/TYuElowCW235twGC3zTE0jIUzAYk2LiZ4E= ELJ/o5fSHanBZCjk9zOHbezpDNQEmc0PT64LF1oVmIM= NyCDwTra3LiUin05ZCGkdKLwReFC9L8Zf01ZfYabSfQ= EWwFTPmx7aajULFcEJRNd2R4xSXWY8CX1ynSe7WK0BCH42wf/REOS9l8Oiyjf587BhGa3y8jGKhUD7fXANDxcQ== 现在我成功地编写了一个litte测试程序来加密,解密,签名和validation数据。 最后我添加了一些测试代码: RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(512); rsa.FromXmlString(key); // key = string with XML above RSAParameters param = rsa.ExportParameters(true); BigInteger p = new BigInteger(param.P); BigInteger q = new BigInteger(param.Q); BigInteger n = new […]

如何将公钥存储在机器级RSA密钥容器中

当仅存储公钥/私钥对的公钥时,我在使用机器级RSA密钥容器时遇到问题。 以下代码创建公共/私有对,并从该对中提取公钥。 该对和公钥存储在单独的密钥容器中。 然后从那些密钥容器获得密钥,此时它们应该与进入容器的密钥相同。 代码适用于为CspParameters.Flags指定CspParameters.Flags (即从PublicKey容器读回的密钥相同),但是当为CspParameters.Flags指定CspParameters.Flags ,从PublicKey读回的密钥是不同的。 为什么行为不同,我需要做些什么来从机器级RSA密钥容器中检索公钥? var publicPrivateRsa = new RSACryptoServiceProvider(new CspParameters() { KeyContainerName = “PublicPrivateKey”, Flags = CspProviderFlags.UseMachineKeyStore //Flags = CspProviderFlags.UseDefaultKeyContainer } ) { PersistKeyInCsp = true, }; var publicRsa = new RSACryptoServiceProvider(new CspParameters() { KeyContainerName = “PublicKey”, Flags = CspProviderFlags.UseMachineKeyStore //Flags = CspProviderFlags.UseDefaultKeyContainer } ) { PersistKeyInCsp = true }; //Export […]

比较C#和ColdFusion(CFMX_COMPAT)之间的密码哈希值

我有一个密码哈希存储在一个表中,并通过以下coldfusion脚本放在那里 – #Hash(Encrypt(Form.UserPassword,GetSiteVars.EnCode))# 我想在ac#应用程序中添加一些外部function。 我希望能够利用已存在的数据,以便我可以对用户进行身份validation。 有谁知道如何在c#中复制上述coldfusion代码? 谢谢你的任何想法。

使用带有RSA C#的非对称算法私钥和公钥

我有两个包含RSA Private和RSA公钥的AsymmetricAlgorithm对象。 从Windows-MY密钥库中检索私钥,从用户证书中检索公钥。 如何使用这些密钥和RSACryptoServiceProvider在C#中使用RSA算法加密数据? 换句话说,我如何指定我想使用已有的密钥?