从RSACryptoServiceProvider转换为RSACng
我目前正在使用rsacryptoserviceprovider,我想更改为rsacng.我正在使用它来签名数据.发生更改的原因是我正在使用PKCS1填充物,我知道PSS填充是首选的.我们正在接受安全审核. 我的问题是如何实例化rsacng,以便每次使用相同的私钥/公钥? 使用rsacryptoserviceprovider我正在做: CspParameters cp = new CspParameters(); cp.KeyContainerName = "ContainerName"; RSACryptoServiceProvider RSA = new RSACryptoServiceProvider(cp); 传递容器名称意味着它使用了在计算机上的容器存储中持续存在的密钥. 使用rsacng,我尝试了一下,但是我得到了一个例外:"不支持请求的操作" RSACng RSA = new RSACng(CngKey.Create(CngAlgor
0 2024-04-21
编程技术问答社区
如何使用c#密码学检索签名哈希算法的友好名称?
以下功能使用证书签名和验证. private static bool Sign_Verify(X509Certificate2 x509, byte[] random_data) { // // Local variable definitions // bool isVerified = false; byte[] buffer = Encoding.Default.GetBytes("Hello World ... !"); byte[] signature_Data = null; byte[] signature_Hash = null; // // Retrieve the private key of the certificate sele
0 2024-04-21
编程技术问答社区
建议在C#.NET中对XML文件进行加密的最佳算法?
我必须加密XML文件,然后发送网络以放置在专用服务器中. 我的其他应用程序将通过提供实际的公共密钥来解密并导入SQL. 您能为此建议我最好的方法. 文件:XML类型 可能的尺寸:最多250 Mb 技术:C#.NET 2008 解决方案 使用 xml加密.它可以直接通过.NET在.NET中通过 MSDN上有一个示例:如何:键. 请注意,您应该使用公共密钥来加密和解密的私钥(而不是您在问题中写的那样). 其他解决方案 使用ssl/tls上传文件(例如,使用https或a socket +其他解决方案 我建议使用 在这里更多是aes algorithm.
0 2024-04-21
编程技术问答社区
为什么像SHA1Managed、SHA256Managed这样的类在我的Intellisense中是隐藏的?
当我进入System.Security.Cryptography名称空间时,我只能看到SHA1,SHA256,HMACSHA1等等. 但实际上,有一个SHA1Managed类,还有SHA256Managed,我看不到吗?当我手动写出它 - 一切都按预期工作. 这是故意隐藏的吗?而简单地实现这些托管版本的区别是什么区别,例如调用其工厂方法(SHA1.Create()或SHA256.Create())?他们是同一件事吗? 解决方案 无法给您一个怪异的IntelliSense问题的答案,但请看一下 sha1managed 实现. SHA1只是基础课.在这种情况下,实现完全相同.它与 FIPS认证.托管版本不使用本机加密库,因此未通过FIPS认证.为客户提供了一个注册表设置(FipsAlgorithmPolicy),可以执行FIPS合规性.如果打开注册表设置,则无法使用托管类. 在您的情况下,如果您进行SHA1Managed或使用SHA1.Create(),则不会有任何
0 2024-04-21
编程技术问答社区
在c#中创建一个带有预计算签名的PKCS#7签名信息
我正在尝试在C#中创建PKCS#7签名消息.数字签名是在HSM中分别计算的,因此我已经具有签名的值,我只想创建一个包含它的PKCS#7结构. 我研究了在system.security.cryptography.pkcs名称空间中使用signedCMS,但这似乎没有提供预先计算的签名的选项. 当我已经拥有数字签名的值时,在C#中生成PKCS#7结构的最佳方法是什么? 解决方案 afaik您无法使用"内置"类别的类别. 但是,我创建了一个示例应用程序 - pkcs7signaturegenerator - 用于使用 pkcs11interop (我是)和弹力城堡库. 在此应用程序中,PKCS11 Interop库通过PKCS#11 API执行签名操作,其中存储在硬件设备中的私钥,而Bouncycastle库则负责构建CMS(PKCS#7)签名结构. 其他解决方案 我认为您想要的是X509Certificate2类,使用静态CreateFromSigne
0 2024-04-21
编程技术问答社区
Reproducing JS PBKDF2 Hash in C#
我必须为现有数据库实现一些新的安全功能.他们曾经用DB的盐在客户端的一侧哈希密码.他们在将密码发送到服务器之前使用此代码来哈希密码: var hash = CryptoJS.PBKDF2(password, USER_SALT, { keySize: 4, iterations: 1000 }); 现在您已经猜到,这是高度不安全的,因为攻击者会在用户从服务器中获取盐并且已经完成客户端的盐分,就好像是用纯文本发送的.这就是为什么我需要做服务器端的原因. 现在,数据库有数千个条目,其中包含用户的用户密码,使用此数据库.我尝试使用Internet的许多参考文献在C#中实现类似的方法,但是我无法获得与DB中存储的相同的哈希. public static string HashPassword(string password, string salt) { byte[] saltBytes = Encoding.UTF8.Get
0 2024-04-21
编程技术问答社区
在c#中创建加密随机数的最快速、线程安全的方法?
注意到,在多个线程上并行生成随机数时,加密随机数生成器并不安全.所使用的发电机是RNGCryptoServiceProvider,它似乎可以重复长时间的随机位(128位).复制的代码如下所示. 缺少使用锁来保护对RNGCryptoServiceProvider实例的访问(在这里杀死了整个速度) using System; using System.Runtime.Caching; using System.Security.Cryptography; using System.Threading.Tasks; namespace ParallelRandomness { class Program { static void Main(string[] args) { var test = new Test(); Console.Write("Serialized verion ru
0 2024-04-21
编程技术问答社区
文件加密和解密问题
我一直在玩VC#Express 2010中的加密和解密文件. 我所看到的所有教程和文档都需要两个FileStream才能加密文件 - 一个用于读取未加密版本,另一个用于加密.当我实际编写代码时,它一直在错误地告诉我,它无法打开文件,因为它是由输出文件流的另一个过程打开的. 我假设这是因为该文件是由输入FileStream打开的.因此,这意味着我必须指定其他文件名?因此,即使在操作成功之后,我现在我将在目录中将原始的未加密文件和单独的加密版本放置?那不是失败了吗?还是我在这里做错了什么?我的代码与此相似... public string filename = "test.xml"; using (FileStream input = new FileStream(filename, FileMode.Open, FileAccess.Read)) using (FileStream output = new FileStram(filename, FileMode.Ope
0 2024-04-21
编程技术问答社区
CngKey.Import(...); 在PC上成功,但在网络主机上失败。
以下行在我的PC上取得了成功,但在Web主机的服务器上引发了例外: CngKey.Import(EccPrivateBlob, CngKeyBlobFormat.EccPrivateBlob); //EccPrivateBlob is a byte[] that works on my PC. 例外: system.security.cryptography.cryptographicexception:内部错误 发生.在 system.security.cryptography.ncryptnative.openstorageprovider(字符串 profidername)在system.security.cryptography.cngkey.import(byte [] keyblob,cngkeyblobformat格式,cngprovider提供商)at ... 这是安全例外吗?有办法解决吗? 解决方案 我能够通过在Azure门户中启用W
0 2024-04-21
编程技术问答社区
使用ECB密码模式的AES 128位算法可以正确解密一个无效的密钥吗?
嗨,我正在学习加密/解密部分.我使用 AES 128 位创建了两种用于加密/解密的方法, ecb cipher模式和 pkcs7 padding. 以下是代码. public class EncClass { public string Encrypt(string text) { byte[] src = Encoding.UTF8.GetBytes(text); byte[] key = Encoding.ASCII.GetBytes("contactcentre"); RijndaelManaged aes = new RijndaelManaged(); aes.Mode = CipherMode.ECB; aes.Padding = PaddingMode.PKCS7; aes.KeyS
0 2024-04-21
编程技术问答社区
在.NET核心中使用SHA-1
我在dotnet core中散布字符串时会得到奇怪的结果 我发现了这个类似的问题:用ASP.Net Core 计算SHA1 并找到了如何将一个字节数组转换为字符串 in .net core 这是我的代码: private static string CalculateSha1(string text) { var enc = Encoding.GetEncoding(65001); // utf-8 code page byte[] buffer = enc.GetBytes(text); var sha1 = System.Security.Cryptography.SHA1.Create(); var hash = sha1.ComputeHash(buffer); return enc.GetString(hash); } 这是我的测试: string test = "broodjepoep"; // forgiv
0 2024-04-21
编程技术问答社区
非对称加密和解密
让我们说我使用该网站上的算法来加密和解密数据,并用公私密钥: c#.net中的公共密钥RSA加密在Codeproject上 现在,让我们说有人使用我的公共密钥使用另一种算法对他的数据进行加密,然后将其发送给我.使用其他算法(例如网站上的算法),我能否使用我的私钥解密信息?还是由于算法不同,这是不可能的? 我的意思是,如果使用使用的密钥正确,则使用不同的加密算法,最终结果是否总是相同的? 是否有一些标准方法来加密信息以使其可以在不同的机器上解密,也许是不同的编程语言? 解决方案 进行了一些讨论,但这是我谦虚地回答问题的尝试: 使用其他算法(例如网站上的算法),我是否可以使用我的私钥解密信息?还是由于算法不同,这是不可能的吗? 您肯定 无法解密数据.通常,您需要针对算法和键进行完整匹配.但是,可能有所不同:平台,OSS,硬件,语言或用于加密/解密的程序.这是因为算法充当具有明确指定规格的公共合同,只要所有公共API都呈现相同的结果,实施就可能有所不
0 2024-04-21
编程技术问答社区
用.NET库ECDsaCng验证BouncyCastle ECDsa签名
现有系统使用弹力城堡(.NET)生成签名,我需要使用Microsoft ECDSACNG类验证这些现有的签名. 考虑尝试执行此操作的以下代码: public static void InterchangeTest() { //AsymmetricCipherKeyPair bKeyPair_0 = Crypto.GenerateEcdsaKey(); String sPassPhrase = "bob is your uncle"; byte[] bPassPhrase = new UTF8Encoding(false).GetBytes(sPassPhrase); int SaltBitSize = 128; int EcdsaBitLength = 521; byte[] bSalt = new byte[SaltBitSize / 8]; new SecureRandom().NextBytes(bSal
0 2024-04-21
编程技术问答社区
C#-使用RSA对数据进行加密和解密
我在C#中具有以下代码: 主类 X509Certificate2 cert = new X509Certificate2("C:/test.pfx", "hello", X509KeyStorageFlags.Exportable | X509KeyStorageFlags.PersistKeySet); Encryption enc = new Encryption(); string encrypted = enc.Encrypt("hello there", cert); string decrypted = enc.Decrypt(encrypted, cert); Console.WriteLine("Encrypted Text: " + encrypted); Console.WriteLine("Decrypted Text: " + de
0 2024-04-20
编程技术问答社区
C# SHA-256与Java SHA-256。结果不同?
我想将Java中的一些代码转换为C#. Java代码: private static final byte[] SALT = "NJui8*&N823bVvy03^4N".getBytes(); public static final String getSHA256Hash(String secret) { try { MessageDigest digest = MessageDigest.getInstance("SHA-256"); digest.update(secret.getBytes()); byte[] hash = digest.digest(SALT); StringBuffer hexString = new StringBuffer(); for (int i = 0; i
0 2024-04-20
编程技术问答社区
如何在C#中加载私有ECDSA密钥ES256?
我已经使用以下命令来生成私人和公共ES256密钥: 创建私钥:openssl ecparam -genkey -name prime256v1 -noout -out private.pem 创建公共密钥:openssl ec -in private.pem -pubout -Out public.pem 现在我遵循了私钥: -----开始EC私钥----- MHCCAQEEIFKXQDXOVAGSSCSC55U0MUEPWVRR3ARWZLMO0YWWW7QHEEIOIOAOGCCCQGSM49 awehouqdqgagaefxuuzedjn9dvjcwky40/coi3nvto97qelhirhirsobbhx3musvxpppek fvv3/fvcjt9ceguwyvkqpphmrfx0efjai8a == -----结束EC私钥------ 遵循公钥: -----开始公钥------ MFKWEWYHKOZIZJ0CAQYIKOZIZJ0DAQ
0 2024-04-20
编程技术问答社区
用C# AesCryptoServiceProvider加密数据,用BouncyCastle AesFastEngine加密。
我需要用标准的C#AescryptoserviceProvider解密数据,该数据在Java侧加入了充气城堡Aesfastengine. (使用Bounca城堡的C#实现数据没问题) 有办法做到这一点吗? 我找不到弹力城堡实施中使用的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, encodedMessageB
0 2024-04-20
编程技术问答社区
用C# AesCryptoServiceProvider加密数据,用BouncyCastle AesFastEngine加密。
我需要用标准的C#AescryptoserviceProvider解密数据,该数据在Java侧加入了充气城堡Aesfastengine. (使用Bounca城堡的C#实现数据没问题) 有办法做到这一点吗? 我找不到弹力城堡实施中使用的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, encodedMessageB
0 2024-04-20
编程技术问答社区
安全存储密码的最佳方法
在计算机上保存密码的最佳方法是什么,以免访问它们?我想将它们存储在注册表中.我希望您能够重置密码,但这不适合服务器.这是为了将它们存储在计算机上以记住它们并自动登录. 重要的编辑:我需要能够从程序中检索普通文本密码,而不是其他任何地方. 解决方案 托管类 protecteddata 功能,因此可以从c#. 使用 您也可以使用P/Invoke直接使用这些功能.有一些示例代码完全可以执行在这里. 响应其他要求的扩展: 有一种方法可以确保您的程序是唯一能够访问密码而无需使用管理员特权的程序的程序,尽管这将需要更多的工作. 基本想法是:您创建安装应用程序时安装的Windows服务.当您要存储/检索用户密码时,应根据您的应用程序启动它.该服务将简单地提供使用权限集的文件读/写访问权限,以便只有管理员才能读/写.额外的安全性来自与该过程的IPC连接,该连接将使用a 命名为管道.然后,您可以使用(对不起,您需要P/Invoke)通过查找连接到管道的客户端的流程ID来
0 2024-04-20
编程技术问答社区
随机数发生器的安全性。BCryptGenRandom vs RNGCryptoServiceProvider
对于那些急忙的人来说,这是不是与NIST的SP800-90A内种植的有争议的Dual_EC_DRBG有关的. 关于两个RNG: 基于Microsoft bcrypt层的一个是其C API. Microsoft .net 有人是否有有关这两个随机数生成器的其他信息?两者都使用HW随机种子(通过旧英特尔斯中的二极管噪声或最新英特尔斯中有争议的RDRAND). ). ps:不确定它应该在安全性,stackoverflow或加密术中... 解决方案 Microsoft .NET RNGCRYPTOSERVICEPROVIDER是一个基于C#的 不完全是,托管框架类只是窗户内置的加密API上的薄包装器.所有System.Security.Cryptography类,其名称以ServiceProvider结尾是本机API的包装器.名称以Managed结束的人以纯托管代码实现.因此,XxxServiceProvider类使用FIPS验证的密码学,而XxxMan
0 2024-04-20
编程技术问答社区