Tag: bouncycastle

BouncyCastle在C#threadsafe中的SecureRandom?

对于Java中的实现,答案显然是肯定的,但是C#中的Org.BouncyCastle.Security.SecureRandom怎么样?

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

从bouncycastle导入RSA密钥有时会抛出“坏数据”

有时,(通常足以成为.NET和充气城堡之间的严重问题),由bouncycastle生成的密钥不会导入到dotnet RSA加密提供程序中。 它只会抛出“DonnéesIncorrectes”; 没有更多细节。 (“不良数据”)。 我无法调试问题,因为guilty函数实现似乎隐藏在CLR(Utils._ImportKey();引用源RSACryptoServiceProvider.cs:297)中。 我试过改变“提供者”但没有成功。 这里有同样的问题..通过更改密钥或密钥来解决 : BouncyCastle RSAPrivateKey到.NET RSAPrivateKey ; 它的unit testing失败,密钥大小从512位到2048位不等。 如何解决/调试这样的问题? 坏数据意味着什么? 这是一个值失败的测试用例: [TestCase( “3130061425891827008704201520933220266588903615593292093008732204896232681270200769431823371565724812996700795538563485957721923348815282268698793938491993”,//mod “65537”,//pe “3130061425891827008704201520933220266588903615593292093008732204896232681270200769431823371565724812996700795538563485957721923348815282268698793938491993”,//priv e “108172619413453999338304010966268975159507181290909920458641813606026415083917”,//p “75249617574313725168879024231390763478340191084309820124417146187514704207891”,//q “46308055148448439895562160789624828220320330169183342667312429963694967752481”, //dp “237677507940292370873826357872619864199100043554818389089435727311526981263”, //dq “4755193289666548078142536433103759575424135202658906348751587662200087509503”//qinv )] public void TestBadKeyForMicrosoft(string mo, string pe, string prive, string p, string q, string dp, string dq, string qinv) { var k = new RsaPrivateCrtKeyParameters( […]

CMS签名 – 时间戳和计数器签名有什么区别

我正在尝试使用BouncyCastle在C#中使用TimeStamp数字Siganture(使用本地TimeStamp证书)。 我对TimeStamp的理解是它要签署当前时间。 不确定它是否应该是当前时间+原始签名内容? 请帮忙。 我的主要困惑是如果将生成的TimeStamp添加到原始签名的Singed / Unsigned属性中。 或者它会被添加为CounterSignature?

使用C#中的Bouncy CastlevalidationECDSA签名

当我尝试在C#中validationBouncy Castle中的ECDSA签名时,我遇到了问题。 代码是从我拥有的Java示例中采用的,因此我100%确定公钥和签名是正确的。 但是C#实现总是返回签名无效。 我检查了曲线参数,它们是正确的。 我尝试使用DER和“原始”签名,但它再次无法正常工作。 任何人都可以发现我做错了什么: namespace TestECDSA { class Program { static void Main(string[] args) { byte[] b = new byte[] { 0x2B, 0xA1, 0x41, 0x00 }; string pubKey = “044F6D3F294DEA5737F0F46FFEE88A356EED95695DD7E0C27A591E6F6F65962BAF”; string signature = “AAD03D3D38CE53B673CF8F1C016C8D3B67EA98CBCF72627788368C7C54AA2FC4”; X9ECParameters curve = SecNamedCurves.GetByName(“secp128r1”); ECDomainParameters curveSpec = new ECDomainParameters(curve.Curve, curve.G, curve.N, curve.H, curve.GetSeed()); ECPublicKeyParameters key = new ECPublicKeyParameters(“ECDSA”, […]

跨平台上的AES cbc填充加密/解密(.net c#和代号为一个充气城堡)

加密/解密在跨平台中不起作用。 我使用此链接使用代号为one的充气城堡AES密码加密/解密文本。 使用J2ME中的Bouncycastle示例进行AES加密/解密 从服务器端(.net),我使用此链接实现相同的方法。 AES 128bit Cross Platform (Java and C#) Encryption Compatibility 现在我没有收到任何错误但是从代号加密不会在服务器端完全解密,反之亦然。 任何人请帮我解决这个问题。 Codename代码: import org.bouncycastle.crypto.CipherParameters; import org.bouncycastle.crypto.CryptoException; import org.bouncycastle.crypto.engines.AESEngine; import org.bouncycastle.crypto.modes.CBCBlockCipher; import org.bouncycastle.crypto.paddings.PaddedBufferedBlockCipher; import org.bouncycastle.crypto.params.KeyParameter; import org.bouncycastle.crypto.params.ParametersWithIV; import org.bouncycastle.util.encoders.Base64; public class Test { private static PaddedBufferedBlockCipher cipher = null; public static void main(String[] args) { try { byte key[] = “MAKV2SPBNI992122”.getBytes(“UTF-8”); byte[] iv […]

使用BouncyCastle AesFastEngine加密C#AesCryptoServiceProvider加密数据

我需要使用标准C#AesCryptoServiceProvider解密数据,该数据在Java端使用Bouncy Castle AesFastEngine加密。 (使用Bounca Castle的c#实现解密数据没问题) 有没有办法做到这一点? 我没有找到在Bouncy Castle实施中使用的IV ……有没有? 任何帮助都会很好! 马库斯 编辑: 以下代码用于初始化AesFastEngine: BlockCipher coder = new AESFastEngine(); CFBBlockCipher cfbCipher = new CFBBlockCipher(coder, 8); StreamCipher streamCipher = new StreamBlockCipher(cfbCipher); streamCipher.Init(true, keyParameter); streamCipher.ProcessBytes(data, 0, data.Length, encodedMessageBytes, 0); 编辑: 您好Grec,感谢您的回答,但它仍然无效……我有一个示例解决方案可以在这里下载。 如果你单击两个按钮,你会得到一个不同的加密数组…… ??? 解密使用充气城堡生成的arrays导致一个例外,说加密数据的长度无效…… 这是我为解密编写的代码: AesManagedAlg = new AesManaged(); AesManagedAlg.Mode = CipherMode.CBC; AesManagedAlg.FeedbackSize = 8; AesManagedAlg.Key = key; […]

RSA Public exponent默认为65537.该值应该是多少? 我的选择有什么影响?

我正在为可能遇到不同指数大小的软件创建unit testing。 ( 参见本RFC第3.3.1节 ) 如何使用Bouncy Castle或任何其他C#库生成密钥大小为65537的RSA密钥对。 如果答案是我可以直接修改它,只要我更新私钥,我应该对公钥和私钥进行哪些具体的更改(或重新计算)? 这是我用来创建指数为65537的密钥的示例代码: // Create key RsaKeyPairGenerator generator = new RsaKeyPairGenerator(); var param = new KeyGenerationParameters(new SecureRandom(), 1024); generator.Init(param); AsymmetricCipherKeyPair keyPair= generator.GenerateKeyPair(); // Save to export format SubjectPublicKeyInfo info = SubjectPublicKeyInfoFactory.CreateSubjectPublicKeyInfo(keyPair.Public); byte[] ret = info.GetEncoded(); string ovalue1 = Convert.ToBase64String(ret); // Read from export format byte[] publicKeyBytes = Convert.FromBase64String(ovalue1); AsymmetricKeyParameter […]

如何在C#/ Bouncy Castle中创建PBKDF2-SHA256密码哈希

我需要创建一个PBKDF2-SHA256密码哈希,但是遇到了一些麻烦。 我下载了Bouncy Castle的回购,但是在unit testing中找到了我想要的东西。 在这里找到了一些示例代码,但这只是SHA1。 代码的关键位是: /// /// Computes the PBKDF2-SHA1 hash of a password. /// /// The password to hash. /// The salt. /// The PBKDF2 iteration count. /// The length of the hash to generate, in bytes. /// A hash of the password. private static byte[] PBKDF2(string password, byte[] salt, int iterations, int […]

在C#中使用BouncyCastle构建证书链

我有一堆作为字节数组给出的根证书和中间证书,我也有最终用户证书。 我想为给定的最终用户证书构建证书链。 在.NET框架中,我可以这样做: using System.Security.Cryptography.X509Certificates; static IEnumerable BuildCertificateChain(byte[] primaryCertificate, IEnumerable additionalCertificates) { X509Chain chain = new X509Chain(); foreach (var cert in additionalCertificates.Select(x => new X509Certificate2(x))) { chain.ChainPolicy.ExtraStore.Add(cert); } // You can alter how the chain is built/validated. chain.ChainPolicy.RevocationMode = X509RevocationMode.NoCheck; chain.ChainPolicy.VerificationFlags = X509VerificationFlags.IgnoreWrongUsage; // Do the preliminary validation. var primaryCert = new X509Certificate2(primaryCertificate); if (!chain.Build(primaryCert)) […]