从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
编程技术问答社区
.net核心PGP加密解密
在void Encryption()上遇到错误. public void Encryption() { #region PGP Encryption PgpEncryptionKeys encryptionKeys = new PgpEncryptionKeys(@"C:\Keys\PGPPublicKey.asc", @"C:\Keys\PGPPrivateKey.asc", "password"); PgpEncrypt encrypter = new PgpEncrypt(encryptionKeys); using (Stream outputStream = File.Create("C:\\Keys\\EncryptData.txt")) { encrypter.EncryptAndSign(outputStream, new FileInfo(@"D:\Keys\PlainText.txt")); }
0 2024-04-21
编程技术问答社区
为公钥RSA加密创建.pem文件 C# .net
我想为此方法生成的公共密钥创建.pem文件 public static Tuple CreateKeyPair() { CspParameters cspParams = new CspParameters { ProviderType = 1 /* PROV_RSA_FULL */ }; RSACryptoServiceProvider rsaProvider = new RSACryptoServiceProvider(1024, cspParams); string publicKey = Convert.ToBase64String(rsaProvider.ExportCspBlob(false)); string privateKey = Convert.ToBase64String(rsaProvider.ExportCsp
0 2024-04-19
编程技术问答社区
C# RSA导入公钥
我需要验证签名的数据.我不知道如何使用公共密钥. public bool VerifyData(string data, string signature) { //decode signature from base 64 byte[] signatureByte = System.Convert.FromBase64String(signature); //hash data to sha256 string hashedData = ConvertToSHA256(data); byte[] hashedDataByte = System.Convert.FromBase64String(hashedData); //verify with RSA PSS string absPath = System.Web.Hosting.HostingEn
0 2024-04-17
编程技术问答社区
Java BC SicBlockCipher在c#中的直接输出等同于
我正在在C#中实现某些内容,为此我有一个单独的规格,并且对我需要做的事情有相当清晰的了解,但是与此同时,作为参考,我有Java实施,并想遵循Java的实现这种情况尽可能接近. 该代码涉及加密流,Java来源为在这里 相关行在这里: private final StreamCipher enc; ... BlockCipher cipher; enc = new SICBlockCipher(cipher = new AESEngine()); enc.init(true, new ParametersWithIV(new KeyParameter(secrets.aes), new byte[cipher.getBlockSize()])); ... ... byte[] ptype = RLP.encodeInt((int) frame.type); //Result can be a single byte long ... ... enc.process
0 2024-04-17
编程技术问答社区
使用System.IdentityModel.Tokens.Jwt用RS512验证JWT签名
我想使用公共密钥使用RS512算法验证JWT签名.我喜欢以下链接中给出的精确解决方案,并且它运行得很好. 验证jwt签名使用RS256算法使用C# 中的公共密钥 ,但我想将System.InderityModel.tokens.jwt与我的应用程序一起使用.谁能通过实现system.inditymodel.tokens.jwt更改工作示例以下? static void Main(string[] args) { var token = "eyJhbGciOiJSUzUxMiIsImtpZCI6ImsxMDY5NDgxOTAifQ.eyJleHAiOjE0NzMzNDcxODUsInN1YiI6ImZmZmZmZmZmNTcxZGJkNjBlNGIwMWYyNzk4ZGI5N2Y4Iiwic2Vzc2lkIjoiNzZlNTg4ZDIzZmM3NDBiMGFkNzIxMDk2MGYwOWFhY2IiLCJ0eXBlIjoiYXQi
0 2024-04-16
编程技术问答社区
XmlElement的Xml签名无法验证
我对相当长的代码块提前道歉,但这是我可以产生的最小的编译示例.我已经省略了从原始代码检查所有错误.我正在使用Visual Studio 2012和.NET 4.5,尽管这对4.5来说并不新鲜,但它应该与任何版本一起使用. 我正在尝试签署XML文档的元素,以保护它们免受篡改.我不想保护整个文档,但只能保护某些元素.甚至使用不同键的不同元素. 但是,当我签署三个示例元素并尝试验证它们时,第一个总是验证,另外两个失败.更糟糕的是,如果我在签名后修改它,则第一个甚至成功.我已经谷歌搜索了很多,阅读了很多教程,甚至问这里的一个理论问题,但我不知道自己做错了什么.有人可以发现我的错误吗? 注意:我很乐意为任何解决这个问题提供的赏金. 证书是通过执行: 创建的 " C:\ Program Files(X86)\ Microsoft SDK \ Windows \ Windows \ V7.1A \ Bin \ Bin \ MakeCert" -R -PE -N" CN
0 2024-04-16
编程技术问答社区
如何使用公钥加密法加密一个字符串
我正在尝试实施自己的RSA加密引擎.给定这些 rsa algorithm 值: > p = 61. // A prime number. q = 53. // Also a prime number. n = 3233. // p * q. totient = 3120. // (p - 1) * (q - 1) e = 991. // Co-prime to the totient (co-prime to 3120). d = 1231. // d * e = 1219921, which is equal to the relation where 1 + k * totient = 1219921 when k = 391. 我正在尝试编写一种方法来加密字符串中的每个字节并返回加密字符串: public string Encrypt(string m, Encoding encoding) { byte[] bytes = encoding.GetBytes
0 2024-04-16
编程技术问答社区
如何在c#中填写RSAParameters的值?
我在我的项目中使用以下代码进行加密,一切正常. RSACryptoServiceProvider x_alg = new RSACryptoServiceProvider( ); // export only the public key RSAParameters x_public_params = x_alg.ExportParameters(false); // export the private key RSAParameters x_private_params = x_alg.ExportParameters(true); 现在客户更改了需求,他想将所有RSAPARAMETER值存储到配置文件中,并在Demo 的详细信息下提供 000000000000000000000000000000000000
0 2024-04-15
编程技术问答社区
如何在c#中只获得RSACryptoServiceProvider的公钥和私钥
我正在下面运行代码以获取公共和私钥,但似乎它输出了整个XML格式.我只需要输出键,如 public and private键和私钥演示 static RSACryptoServiceProvider rsa; private RSAParameters _privateKey; private RSAParameters _publicKey; public RSACrypto() { rsa = new RSACryptoServiceProvider(2048); _privateKey = rsa.ExportParameters(true); _publicKey = rsa.ExportParameters(false); } public string GetPublicKeyStrin
0 2024-04-14
编程技术问答社区
在从字符串中创建X509Certificate2时,出现'无法找到所请求的对象'的异常。
我正在尝试从字符串创建X509Certificate2.让我举个例子: string keyBase64String = Convert.ToBase64String(file.PKCS7); var cert = new X509Certificate2(Convert.FromBase64String(keyBase64String)); 和keyBase64String具有这样的内容:"MIIF0QYJKoZI ........hvcNAQcCoIIFwjCCBb4CA0=" 和file.PKCS7是字节数组,我从数据库下载. 创建X509Certificate2时,我有以下例外: 找不到请求的对象 和堆栈跟踪: "找不到请求的对象" x509certificate2异常无法找到 请求的对象"} at system.security.cryptography.cryptographicexception.throwcryptographice
2 2024-04-13
编程技术问答社区
C# 如何用PGP公钥简单加密一个文本文件?
我已经研究了一些有关如何实现我在问题中所说的内容并找到几个API的信息/p> public String Encrypt(String message, PublicKey publicKey) 不知道这是否可以做到?如果没有 谢谢. 更新: 到目前为止使用它)! 解决方案 我找到了一个教程public class PgpEncrypt { private PgpEncryptionKeys m_encryptionKeys; private const int BufferSize = 0x10000; /// /// Instantiate a new PgpEncrypt class with initialized PgpEncryptionKeys. /// /// ///
0 2024-04-12
编程技术问答社区
使用Base64编码的公钥来验证RSA签名
简而言之,这是我的问题: private string publicKeyString = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDVGUzbydMZS+fnkGTsUkDKEyFOGwghR234d5GjPnMIC0RFtXtw2tdcNM8I9Qk+h6fnPHiA7r27iHBfdxTP3oegQJWpbY2RMwSmOs02eQqpKx4QtIjWqkKk2Gmck5cll9GCoI8AUAA5e0D02T0ZgINDmo5yGPhGAAmqYrm8YiupwQIDAQAB"; /* Some transformation required, using publicKeyString to initiate a new RSACryptoServiceProvider object */ //for now: RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(
2 2024-04-12
编程技术问答社区
如何在C#中使用公钥和私钥加密技术
我想使用公共/私钥技术对数据进行加密.我的意思是,使用接收器的公钥加密,接收器可以用自己的私钥解密. 我该怎么做?您有任何建议或示例代码吗? 解决方案 代码示例: private static string _privateKey; private static string _publicKey; private static UnicodeEncoding _encoder = new UnicodeEncoding(); private static void RSA() { var rsa = new RSACryptoServiceProvider(); _privateKey = rsa.ToXmlString(true); _publicKey = rsa.ToXmlString(false); var text = "Test1"; Console.WriteLine("RSA // Text to encrypt: " + t
0 2024-04-12
编程技术问答社区
在C语言中用RAW EC生成的密钥进行OpenSSL签名和验证
我生成我的EC私钥作为随机数,而我的EC公钥作为随机数的发电机的乘法. 现在,我将使用这些密钥签署和验证消息,但是有关验证的操作失败了.您有任何提示可以解决这个问题吗? 我正在使用openssl 1.0.0进行某些约束.我不能切换新的. #include #include #include #include #include #include #include #include int main() { BN_CTX *ctx; EC_GROUP *curve; BIGNUM *q = NULL; EVP_MD_CTX *hashctx; unsigned int ol; unsigned
0 2024-04-09
编程技术问答社区
在C/C++中实现RSA的开放源代码(使用库或自己编写)。
我需要RSA实现的开源代码(加密/解密等).谁能建议一些. 编辑: 使用诸如Opessl之类的开源库或自己写自己的开源库(库也包含其他冗余内容) 是好的吗? 解决方案 OpenSSL库是明显的选择. cryptlib 是另一个选择,但是您需要检查许可具体的). 关于编写自己的代码: 如果您仅需要 rsa,它不大,您可以自己写.但是,RSA几乎从未自行使用.通常使用随机键和对称算法进行加密,然后使用RSA加密随机密钥.因此,如果您想要数据加密并决定编写自己的内容,则将重新发明轮子. 其他解决方案 crypto ++库是一个免费的C ++加密计划库.包括许多不同的不同加密系统它提供了RSA. 通常,滚动自己的加密/安全代码绝不是一个好主意,除非这是您擅长的.安全代码很难,即使在已建立的库中,漏洞,错误和故障偶尔会弹出. 其他解决方案 OpenSSL将是标准选择. http://www.openssl.org/ http://www.openssl.or
0 2024-04-09
编程技术问答社区
用C语言实现Linux的公钥
我正在尝试使用公共密钥加密签名并随后验证文件.该文件是一个简单的明文文件,包含用于创作目的的用户信息. 我尝试了不同的网站以实现公共密钥加密算法的C实现,但我什么都没找到.许多站点都指向使用证书(X.509等),但这远远超出了我的需求.我只是在寻找一种生成,公共和私钥的方法,并使用一种相对众所周知的算法来签名和验证文件. 对纯C实施的任何指针?重点是我可以重用的代码,而不是外部LIB.主要问题是我不想链接到完整的LIB及其依赖性以拥有非常基本的公共密钥系统. 谢谢. 解决方案 openssl 是一个很好的软件包.您可以使用加密库库部分,该部分提供基本的RSA实现.这可能与您要寻找的内容一致. cryptlib 是另一种可以对您有用的选择.它有一些奇怪的许可问题,因此请考虑这些问题,具体取决于您的使用方式. crypto ++ 是一组不同的加密技术P> 最后,RSA实现并不是很复杂,因此您甚至可以使用 GMP 您需要的必要数学功能. 其他解决方
2 2024-04-08
编程技术问答社区
在OpenSSL EVP api的EVP_OpenInit()中得到错误,用于RSA解密,在C语言中。
我使用OpenSSL库(EVP API)面临RSA解密问题. 这是我的密钥一代代码 #include #include #include #include #include #define SECFILE "sec.pem" #define PUBFILE "pub.pem" int main() { EVP_PKEY_CTX *ctx; EVP_PKEY *pkey = NULL; ctx = EVP_PKEY_CTX_new_id(EVP_PKEY_RSA, NULL); FILE *fp; if (!ctx) { /* Error occurred */ perror("Error in CTX \n"); } if (EVP
0 2024-04-07
编程技术问答社区
python ECDSA和C micro-ecc库之间的ECDSA签名和验证问题
当我执行以下操作时,我正面临问题: 使用Python为ECDSA SECP256K1曲线创建了一个公共私钥对,并将其打印在终端上. 复制在Python脚本和Visual Studio(使用Micro-ECC库的C编码)中粘贴了密钥对.因此,每次运行代码都不会生成新密钥. 使用私钥在Python中签署消息(" Hello"),并在终端上同时打印签名和消息.我知道必须首先使用标准哈希算法(例如SHA256)将消息进行哈希,但是在这种情况下,我正在直接使用该消息进行签名. 将签名和相同的消息(哈希)复制到Visual Studio中. 当我在Visual Studio中调用验证API时,验证会失败,尽管它使用了相同的公钥,消息,签名和曲线. 库我正在使用: C in Visual Studio ecdsa for python 我已经测试和确保的其他事情: 在Python中签名和验证两者都可以很好地适用于相同的钥匙对(SK,VK). 在Visual Stud
0 2024-04-07
编程技术问答社区
OpenSSL RSA。无法加密/解密长于16字节的信息
我正在研究一个简单的程序,该程序使用OpenSL来进行基本的RSA加密和解密.它适用于小消息( 这是我的程序输出15个字节: Generating RSA keypair...done. Message to encrypt: 0123456789ABCDE 16 bytes encrypted Decrypted message: 0123456789ABCDE 和16个字节: Generating RSA keypair...done. Message to encrypt: 0123456789ABCDEF 16 bytes encrypted 140153837057696:error:06065064:digital envelope routines:EVP_DecryptFinal_ex:bad decrypt:evp_enc.c:467: Decrypted message: (null) 看来,无论如何,总共只有16个字节是加密的.
2 2024-04-07
编程技术问答社区