Tag: openssl

OpenSSL和C#之间的不同S / MIME签名

我正在尝试在我的.Net程序中使用OpenSSL代码。 这是代码: openssl pkcs12 -in “My PassKit Cert.p12” -clcerts -nokeys -out certificate.pem openssl pkcs12 -in “My PassKit Cert.p12” -nocerts -out key.pem smime -binary -sign -signer certificate.pem -inkey key.pem -in manifest.json -out signature -outform DER 我试图使用.Net OpenSSL,但我完全不知道如何使用它,我找不到一个好的文档。 我决定使用.Net来执行相同的签名过程,这里是代码: var dataToSign = System.IO.File.ReadAllBytes(filePathToSign); ContentInfo contentInfo = new ContentInfo(dataToSign); X509Certificate2 signerCert = new X509Certificate2(System.IO.File.ReadAllBytes(signerPfxCertPath), signerPfxCertPassword); var signedCms = […]

如何从.NET导入RSA公钥到OpenSSL

我有一个.NET程序和Borland Win32程序需要传递一些加密安全信息。 现在的计划是让.NET应用程序创建一个公钥/私钥对,将公钥存储在磁盘上,并在.NET程序运行时将私钥保存在内存中。 然后,Borland应用程序将从磁盘读取公钥,并使用OpenSSL库使用公钥加密数据并将结果写入磁盘。 最后,.NET应用程序将读取加密数据并使用私钥对其进行解密。 从.NET导出密钥并将其导入OpenSSL库的最佳方法是什么?

如何解码从Base64到字节数组的文本字符串,以及获取此字节数组的字符串属性而不会损坏数据

好吧,我有一串文字,用Base 64编码,如下所示: string myText = “abcBASE64TEXTGOESHEREdef==”; // actual string is 381 characters long with trailing ‘==’ 然后我将我的字符串从Base 64转换为字节数组,如下所示: byte[] decodedFromBase64 = Convert.FromBase64String(myText); 此时,我想获取此字节数组的字符串值,并将其保存在文本文件中, 而不会丢失数据或损坏 。 下面的代码似乎没有这样做: string myDecodedText = Encoding.ASCII.GetString(decodedFromBase64); StreamWriter myStreamWriter = new StreamWriter(“C:\\OpenSSL-Win32\\bin\\textToDecrypt.txt”); myStreamWriter.Write(myString); myStreamWriter.Flush(); myStreamWriter.Close(); 有人可以告诉我哪里出错了。 编辑:输出不可读,我需要获取解码后的字符串然后使用OpenSSL解密它。 输出和OpenSSL的结果都在下面:

解压缩使用PHP openssl_encrypt加密的C#中的字符串

我有一个客户使用以下代码在PHP中加密字符串: $password = ‘Ty63rs4aVqcnh2vUqRJTbNT26caRZJ’; $method = ‘AES-256-CBC’; texteACrypter = ‘Whether you think you can, or you think you can\’t–you\’re right. – Henry Ford’; $encrypted = openssl_encrypt($texteACrypter, $method, $password); 导致此加密输出: MzVWX4tH4yZWc/w75zUagUMEsP34ywSYISsIIS9fj0W3Q/lR0hBrHmdvMOt106PlKhN/1zXFBPbyKmI6nWC5BN54GuGFSjkxfuansJkfoi0= 当我尝试在C#中解密该字符串时,它给了我一堆像这样的垃圾: Z o }’*2 I4y J6S xz {9^ ED fF } گs ) Q i $) 我已经尝试使用AesManaged而不是RijndaelManaged更改填充,更改密钥大小,使用不同的密钥等。所有这些都会导致不同的垃圾字符串或各种exception。 我必须遗漏一些非常基本的东西,但我不确定此时还有什么可以尝试的。 这是我的解密代码(我从另一个stackoverflow问题无耻地复制: openssl只使用.NET类 ) class Program { //https://stackoverflow.com/questions/5452422/openssl-using-only-net-classes […]

使用.NET类的OpenSSL加密

我正在寻找创建一个使用与OpenSSL兼容的.NET库的类。 我知道有一个OpenSSL.Net包装器,但我宁愿避免引用第三方\非托管代码。 我不是在寻找关于这是否是正确选择的讨论,但有理由。 目前我有以下内容,我认为应该与OpenSSL兼容 – 它有效地完成了我认为OpenSSL从OpenSSL文档中所做的事情。 但是,即使只使用此类进行加密和解密,我也会收到以下错误: [CryptographicException] Padding is invalid and cannot be removed. 我已经逐步完成了代码并validation了salt \ key \ iv在加密和解密过程中都是一样的。 请参阅下面的示例类和调用加密解密。 欢迎任何想法或指示。 public class Protection { public string OpenSSLEncrypt(string plainText, string passphrase) { // generate salt byte[] key, iv; byte[] salt = new byte[8]; RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider(); rng.GetNonZeroBytes(salt); DeriveKeyAndIV(passphrase, salt, out key, out […]

C#RSA公钥输出不正确

我目前正在尝试使用C#生成并发送公共RSA密钥。 它应该是PEM格式的2048位长密钥。 我使用OpenSSL命令成功完成了以下操作(缩短了一些输出): $ openssl genrsa 2048 Generating RSA private key, 2048 bit long modulus ……………………………………………………+++ ……………………………………………………+++ e is 65537 (0x10001) $ openssl rsa -pubout —–BEGIN RSA PRIVATE KEY—– MIIEowIBAAKCAQEAy1MoBtENHBhYLgwP5Hw/xRGaBPHonApChBPBYD6fiq/QoLXA RmyMoOjXHsKrrwysYIujXADM2LZ0MlFvPbBulvciWnZwp9CUQPwsZ8xnmBWlHyru xTxNSvV+E/6+2gMOn3I4bmOSIaLx2Y7nCuaenREvD7Mn0vgFnP7yaN8/9va4q8Lo … … y5jiKQKBgGAe9DlkYvR6Edr/gzd6HaF4btQZf6idGdmsYRYc2EMHdRM2NVqlvyLc MR6rYEuViqLN5XWK6ITOlTPrgAuU6Rl4ZpRlS1ZrfjiUS6dzD/jtJJvsYByC7ZoU NxIzB0r1hj0TIoedu6NqfRyJ6Fx09U5W81xx77T1EBSg4OCH7eyl —–END RSA PRIVATE KEY—– writing RSA key —–BEGIN PUBLIC KEY—– MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAy1MoBtENHBhYLgwP5Hw/ xRGaBPHonApChBPBYD6fiq/QoLXARmyMoOjXHsKrrwysYIujXADM2LZ0MlFvPbBu lvciWnZwp9CUQPwsZ8xnmBWlHyruxTxNSvV+E/6+2gMOn3I4bmOSIaLx2Y7nCuae nREvD7Mn0vgFnP7yaN8/9va4q8LoMKlceE5fSYl2QIfC5ZxUtkblbycEWZHLVOkv +4Iz0ibD8KGo0PaiZl0jmn9yYXFy747xmwVun+Z4czO8Nu+OOVxsQF4hu1pKvTUx 9yHH/vk5Wr0I09VFyt3BT/RkecJbAAWB9/e572T+hhmmJ08wCs29oFa2Cdik9yyE 2QIDAQAB —–END […]

C#版本的OpenSSL EVP_BytesToKey方法?

我正在寻找OpenSSL EVP_BytesToKey函数的直接.NET实现。 我发现的最接近的是System.Security.Cryptography.PasswordDeriveBytes类(和Rfc2898DeriveBytes ),但它似乎略有不同 ,并且不生成与EVP_BytesToKey相同的密钥和iv 。 我也发现这个实现似乎是一个好的开始,但没有考虑迭代计数。 我意识到有OpenSSL.NET,但它只是本机openssl DLL的包装,而不是“真正的”.NET实现。