Code Monkey home page Code Monkey logo

netcore.encrypt's Introduction

NETCore.Encrypt 中文文档

NuGet NET 6.0 NetStandard 2.1 license GitHub-Actions-Img

NETCore encrypt and decrypt tool,Include AES,RSA,MD5,SAH1,SAH256,SHA384,SHA512 and more

To install NETCore.Encrypt, run the following command in the Package Manager Console

Package Manager

Install-Package NETCore.Encrypt -Version 2.1.1

.NET CLI

dotnet add package NETCore.Encrypt --version 2.1.1

PackageReference

<PackageReference Include="NETCore.Encrypt" Version="2.1.1" />

Easy to use with EncryptProvider

AES

Create AES Key

var aesKey = EncryptProvider.CreateAesKey();

var key = aesKey.Key;
var iv = aesKey.IV;

AES encrypt

  • AES encrypt without iv (ECB mode)

    var srcString = "aes encrypt";
    var encrypted = EncryptProvider.AESEncrypt(srcString, key);
  • AES encrypt with iv (CBC mode)

    var srcString = "aes encrypt";
    var encrypted = EncryptProvider.AESEncrypt(srcString, key, iv);
  • AES encrypt bytes with iv (CBC mode)

    var srcBytes = new byte[]{xxx};
    var encryptedBytes = EncryptProvider.AESEncrypt(srcBytes, key, iv);

ASE decrypt

  • AES decrypt without iv (ECB mode)

    var encryptedStr = "xxxx";
    var decrypted = EncryptProvider.AESDecrypt(encryptedStr, key);
  • AES decrypt with iv (CBC mode)

    var encryptedStr = "xxxx";
    var decrypted = EncryptProvider.AESDecrypt(encryptedStr, key, iv);
  • AES decrypt bytes with iv (CBC mode)

    var encryptedBytes =  new byte[]{xxx};
    var decryptedBytes = EncryptProvider.AESDecrypt(encryptedBytes, key, iv);

DES

  • Create DES Key

    //des key length is 24 bit
    var desKey = EncryptProvider.CreateDesKey();
  • Create DES Iv 【NEW】

    //des iv length is 8 bit
    var desIv = EncryptProvider.CreateDesIv();
  • DES encrypt (ECB mode)

    var srcString = "des encrypt";
    var encrypted = EncryptProvider.DESEncrypt(srcString, key);
  • DES encrypt bytes (ECB mode)

    var srcBytes =  new byte[]{xxx};
    var decryptedBytes = EncryptProvider.DESEncrypt(srcBytes, key);
  • DES decrypt (ECB mode)

    var encryptedStr = "xxxx";
    var decrypted = EncryptProvider.DESDecrypt(encryptedStr, key);
  • DES decrypt bytes (ECB mode)

    var encryptedBytes =  new byte[]{xxx};
    var decryptedBytes = EncryptProvider.DESDecrypt(encryptedBytes, key);
  • DES encrypt bytes with iv (CBC mode)【NEW】

    var srcBytes =  new byte[]{xxx};
    var encrypted = EncryptProvider.DESEncrypt(srcBytes, key, iv);
  • DES decrypt bytes with iv (CBC mode)【NEW】

    var encryptedBytes =  new byte[]{xxx};
    var encrypted = EncryptProvider.DESDecrypt(encryptedBytes, key, iv);

RSA

  • Enum RsaSize

    public enum RsaSize
    {
        R2048=2048,
        R3072=3072,
        R4096=4096
    }
  • Create RSA Key with RsaSize

    var rsaKey = EncryptProvider.CreateRsaKey();    //default is 2048
    
    // var rsaKey = EncryptProvider.CreateRsaKey(RsaSize.R3072);
    
    var publicKey = rsaKey.PublicKey;
    var privateKey = rsaKey.PrivateKey;
    var exponent = rsaKey.Exponent;
    var modulus = rsaKey.Modulus;
  • Rsa Sign and Verify method

    string rawStr = "xxx";
    string signStr = EncryptProvider.RSASign(rawStr, privateKey);
    bool   result = EncryptProvider.RSAVerify(rawStr, signStr, publicKey);
  • RSA encrypt

    var publicKey = rsaKey.PublicKey;
    var srcString = "rsa encrypt";
    
    
    var encrypted = EncryptProvider.RSAEncrypt(publicKey, srcString);
    
    // On mac/linux at version 2.0.5
    var encrypted = EncryptProvider.RSAEncrypt(publicKey, srcString, RSAEncryptionPadding.Pkcs1);
  • RSA decrypt

    var privateKey = rsaKey.PrivateKey;
    var encryptedStr = "xxxx";
    
    var decrypted = EncryptProvider.RSADecrypt(privateKey, encryptedStr);
    
    // On mac/linux at version 2.0.5
    var decrypted = EncryptProvider.RSADecrypt(privateKey, encryptedStr, RSAEncryptionPadding.Pkcs1);
  • RSA from string

    var privateKey = rsaKey.PrivateKey;
    RSA rsa = EncryptProvider.RSAFromString(privateKey);
  • RSA with PEM

    //Rsa to pem format key
    
    //PKCS1 pem
    var pkcs1KeyTuple = EncryptProvider.RSAToPem(false);
    var publicPem = pkcs1KeyTuple.publicPem;
    var privatePem = pkcs1KeyTuple.privatePem;
    
    //PKCS8 pem
    var pkcs8KeyTuple = EncryptProvider.RSAToPem(true);
    publicPem = pkcs8KeyTuple.publicPem;
    privatePem = pkcs8KeyTuple.privatePem;
    
    //Rsa from pem key
    
    var rsa = EncryptProvider.RSAFromPem(pemPublicKey);
    rsa = EncryptProvider.RSAFromPem(pemPrivateKey);
    
    //Rsa encrypt and decrypt with pem key
    
    var rawStr = "xxx";
    var enctypedStr = EncryptProvider.RSAEncryptWithPem(pemPublicKey, rawStr);
    var decryptedStr = EncryptProvider.RSADecryptWithPem(pemPrivateKey, enctypedStr);
  • RSA with PKCS #1 / PKCS #8

    //Rsa to pkcs1 format key
    
    //PKCS1
    var pkcs1KeyTuple = EncryptProvider.RsaToPkcs1();
    var publicPkcs1 = pkcs1KeyTuple.publicPkcs1;
    var privatePkcs1 = pkcs1KeyTuple.privatePkcs1;
    
    //Rsa to pkcs8 format key
    
    //PKCS8
    var pkcs8KeyTuple = EncryptProvider.RsaToPkcs8();
    var publicPkcs8 = pkcs1KeyTuple.publicPkcs8;
    var privatePkcs8 = pkcs1KeyTuple.privatePkcs8;
    
    //Rsa from pkcs public key
    
    var rsa = EncryptProvider.RSAFromPublicPkcs(pkcsPublicKey);  // Pkcs #1 | Pkcs #8
    rsa = EncryptProvider.RSAFromPrivatePkcs1(privatePkcs1);
    rsa = EncryptProvider.RSAFromPrivatePkcs8(privatePkcs8);
    
    //Rsa encrypt and decrypt with pkcs key
       
    

MD5

var srcString = "Md5 hash";
var hashed = EncryptProvider.Md5(srcString);
var srcString = "Md5 hash";
var hashed = EncryptProvider.Md5(srcString, MD5Length.L16);

SHA

  • SHA1

    var srcString = "sha hash";    
    var hashed = EncryptProvider.Sha1(srcString); 
  • SHA256

    var srcString = "sha hash";    
    var hashed = EncryptProvider.Sha256(srcString); 
  • SHA384

    var srcString = "sha hash";    
    var hashed = EncryptProvider.Sha384(srcString); 
  • SHA512

    var srcString = "sha hash";    
    var hashed = EncryptProvider.Sha512(srcString);

HMAC

  • HMAC-MD5

    var key="xxx";
    var srcString = "hmac md5 hash";     
    var hashed = EncryptProvider.HMACMD5(srcString,key);
  • HMAC-SHA1

    var key="xxx";
    var srcString = "hmac sha hash";    
    var hashed = EncryptProvider.HMACSHA1(srcString,key);
  • HMAC-SHA256

    var key="xxx";
    var srcString = "hmac sha hash";    
    var hashed = EncryptProvider.HMACSHA256(srcString,key);
  • HMAC-SHA384

    var key="xxx";
    var srcString = "hmac sha hash";    
    var hashed = EncryptProvider.HMACSHA384(srcString,key);
  • HMAC-SHA512

    var key="xxx";
    var srcString = "hmac sha hash";    
    var hashed = EncryptProvider.HMACSHA512(srcString,key);

Base64

  • Base64Encrypt

    var srcString = "base64 string";    
    var hashed = EncryptProvider.Base64Encrypt(srcString);   //default encoding is UTF-8
    var srcString = "base64 string";    
    var hashed = EncryptProvider.Base64Encrypt(srcString,Encoding.ASCII);  
  • Base64Decrypt

    var encryptedStr = "xxxxx";    
    var strValue = EncryptProvider.Base64Decrypt(encryptedStr);   //default encoding is UTF-8
    var encryptedStr = "xxxxx";    
    var strValue = EncryptProvider.Base64Decrypt(encryptedStr,Encoding.ASCII); 

Easy to use hash with EncryptExtensions

MD5 Extensions

  • String to MD5

var hashed="some string".MD5();

SHA Extensions

  • String to SHA1

var hashed="some string".SHA1();

Tips:SHA256,SHA384,SHA512 the same usage like SHA1

HMACSHA Extensions

  • String to HMACSHA1

  var key="xxx";
  var hashed="some string".HMACSHA1(key);

Tips:HMACSHA256,HMACSHA384,HMACSHA512 the same usage like HMACSHA1

LICENSE

MIT License

netcore.encrypt's People

Contributors

catcherwong avatar danielabbatt avatar jacobpretorius avatar jtone123 avatar mylovecc avatar siox0911 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

netcore.encrypt's Issues

建议

1、希望作者能提供更多的加密方式
2、在工作中,不可避免与其他语言进行通信。如:.net to java,加密算法不一样。希望作者能出一些.net对其他语言的加密转换

Is NETCore.Encrypt in a Blazor Webassembly Client .Net 7.0 project working?

Hi,

var aesKey = EncryptProvider.CreateAesKey(); var jsonString = JsonSerializer.Serialize(MyComplexObj); await JsConsole.LogAsync(jsonString); var encrypted = EncryptProvider.AESEncrypt(jsonString, aesKey.Key, aesKey.IV); await JsConsole.LogAsync(encrypted);

The first LogAsync gives back the complexobject as string. The second LogAsync returns null. I used a Blazor Webassambly Cient project mit .net7.0. I thought Blazor wasm was compatible with netStandard 2.1?
Any Ideas?

Why choose Random over CryptoRandom?

See here. Why choose Random over CryptoRandom when generating Key and IV? Since this is a sensitive key, would it not make more sense to use a more secure random number generator?

Encryprion and whitespace

Cannot encrypt whitespace (space) because of Trim() function on checks. In my opinion 'space' is valid string for encryprion

Problems with AES

Hi, I clone the project and update the target framework to Net 6.0 and one test is failing
"AES decrypt success test" when I change the scrString to a "test AES encrypt!" all is working, but the encrypted and decrypted are not the same.

This is just a report :)
have a good day

Bug & missing feature

well, first of all, there are 2 important methods on RSA you missed.Those are Sign() and Verify().

Then, there's an important BUG about ".net Standard".
try these steps:
1.create RSA key pair and save them.
2.Create a ".net core" project and a ".net framework" (console or winform)project
3.run your RSAEncrypt() and RSADecrypt() with the same key pair

now you may get your BUG!

RSA Error while trying to encrypt a long string (245+ characters)

String to encrypt:

eyJNb2R1bHVzIjoidHVSL1V1dFVSV0RSVElDYTFFRDcraUF2MUVnQUl0dC9oNkhHc0x6SG80QXAyVVdqWGtvRkp4T1NuRmdhY3d4cWM0WUg5UDdRaVIxQ1lCK3lvMnJUbkhZbVIrYWs2V3RJRU1YNWtmTTJrWHBNUVY2aFBrd0FxRTFpU1pWRUM2eXlmeTNGZUJTVmNnVlUwMFpJMGozbzhqT3ZMOXhneGhmT1J1eTcwM1RUbXdFPSIsIkV4cG9uZW50IjoiQVFBQiIsIlAiOiI3MVNIYVRnK2JvOXhzRnEzSXlrcHRFUXVHUXZTNDNEUDFoM04xcVlBN1E1VHpoS0IydEc1RWxvamtYTkF4d0VVVStxSnZMWDBxTHdzd09zRkhaL3lydz09IiwiUSI6Inc2R2ltem84a0lUL0xuS2U0Sk5QTUt2YTlVVzBSZUZlVzA5U1ZtVnFVWS9VeHl2eU9kemowd3JzTTZib1ZCU1JnZi9SbUZwRUZ1bUZTVW9yVWkxNVR3PT0iLCJEUCI6Im9yNXpPaXloMzZLeFozKzRhek54aFlDYmJES3JIRGc1VEZ1Ri9rRngvY0V4WWI4YUNFZDJ0ekVPWUxqandxOU1PR2dUYzN5enV3NEN6TWpEK01vc1J3PT0iLCJEUSI6InMvNGhhQVM2K0pVRlhDemxkT2JVTTRuTEdXUWFxempoNGMwbmlvb2d1ZzVGelVMbnlNa3RiRjFlV1YrMTNyWlY4bS8yM2VBZlNaMXRuckw1RE5EK0RRPT0iLCJJbnZlcnNlUSI6IlBPSkRGUk03MmVxd0R3TytldDFpTzIwTWlQcFVEUS93N1hEMHBMLzJWYTE4OEgrRGlaK0NuZDJRdnFYZyt4NFdNZSsrVlVNYXo2bWM3V1g4WnBaWW9RPT0iLCJEIjoiWE1QUEZPYktDcHFON21pNG4zb0tsSmFveTlwdFAwRG9FWXBydGc4NmoyS2RWMWZzQWhJM1JOZTNvRmRMcXhrY0VWWmxTTTNLUmhHeUxnRkY0WDk0cnVIYjBQeC9LZVQxMW1BeDNvQ2NCRVlWelhabXlIUHQzWCs2dlBMZzdmYUhtRmlxK3N0Y2NMTlBNSEdna2lkWTF6NGtiTXZwZnBlOWxhN0VMWUdKM21VPSJ9

Another string tried:

La mayoría de los senadores del PJ no votaron alineados con los gobernadores Fuente: DyN - Crédito: Prensa Senado de la Nación La dinámica se repite. La mayoría de los gobernadores del PJ y de partidos provinciales defienden en público posiciones que luego los senadores de sus provincias, y sus partidos, contradicen en el recinto. La votación esta madrugada del proyecto para retrotraer las tarifas a noviembre pasado, cuyo veto ya fue anunciado por el Gobierno, volvió a dejar en evidencia ese doble juego. De hecho en la Casa Rosada resaltan que sólo 7 de los 19 gobernadores opositores jugaron favorablemente. Los gobernadores, por su parte, suelen argumentar que los legisladores no les responden automáticamente. Los senadores de las provincias cuyos gobernadores rechazaron el proyecto opositor contra el tarifazo votaron en su mayoría a favor de la iniciativa. Algunos de esos mandatarios se encontrarán con Mauricio Macri en las próximas horas. ADEMÁS Es el caso del tucumano Juan Manzur . Los senadores peronistas de su provincia, José Alperovich y Beatriz Mirkin apoyaron el proyecto que finalmente quedó sancionado con 37 votos afirmativos y 30 en contra. Tampoco la gobernadora de Catamarca, Lucía Corpacci , que hoy se reunirá con Macri en Salta , aportó a que la iniciativa perdiera fuerza en el Senado. La apoyaron Dalmacio Mera (un senador vinculado al gobernador Juan Manuel Urtubey y que había firmado en disidencia el dictmane) e Inés Blas. El santiagueño Gerardo Zamora , por su parte, aportó la ausencia de la peronista Blanca Porcel. Sin embargo, los otros dos senadores, que también le responden, Ada Itúrrez y Gerardo Montenegro apoyaron el proyecto opositor. Algo similar ocurrió con el gobernador de San Juan, Sergio Uñac que sumó una ausencia, la de Cristina López Valverde, pero no pudo evitar que su hermano Rubén votara a favor de la iniciativa. Aunque nunca estuvo en las cuentas de la Casa Rosada, tampoco rechazó el proyecto el senador cordobés Carlos Caserio, alineado con el gobernador Juan Schiaretti . Tampoco en el caso de Gustavo Bordet , otro de los gobernadores que en público había rechazado no solo el contenido del proyecto opositor, sino también la facultad del Congreso para modificar las tarifas, esa posición tuvo correlato en los votos en el Senado. Los peronistas entrerrianos Pedro Guastavino y Sigrid Kunath respaldaron el freno al tarifazo. Aunque en las últimas semanas el chaqueño Domingo Peppo evitó manifestarse en público, -avanzan varias causas de corrupción que alcanzan a exfuncionarios de su gobierno-, tampoco él pudo evitar que el peronista Eduardo Aguilar y la kirchnerista Inés Pilatti votaran en contra. Sí lo hicieron, en cambio, los senadores salteños Cristina Fiore Viñuales y Rodolfo Urtubey. El gobernador Juan Manuel Urtubey estuvo con Macri la semana pasada y le presentó a Macri el proyecto para bajar tarifas recortando el IVA a los servicios, que apoyaban otros jefes provinciales como Schiaretti. El gobernador salteño había dicho en público que el proyecto que se aprobó hoy es malo.

Used code:

EncryptProvider.RSAEncrypt(GetPublicKey(), plainText, RSAEncryptionPadding.Pkcs1);

Error in Client (.Net 4.6.1):

e.Message
Longitud incorrecta. (Incorrect length)

e.Source
mscorlib

e.StackTrace
en System.Security.Cryptography.CryptographicException.ThrowCryptographicException(Int32 hr)
en System.Security.Cryptography.RSACryptoServiceProvider.EncryptKey(SafeKeyHandle pKeyContext, Byte[] pbKey, Int32 cbKey, Boolean fOAEP, ObjectHandleOnStack ohRetEncryptedKey)
en System.Security.Cryptography.RSACryptoServiceProvider.Encrypt(Byte[] rgb, Boolean fOAEP)
en System.Security.Cryptography.RSACryptoServiceProvider.Encrypt(Byte[] data, RSAEncryptionPadding padding)
en NETCore.Encrypt.EncryptProvider.RSAEncrypt(String publicKey, String srcString, RSAEncryptionPadding padding)

Error in Server (.Net Core 2.0.7):

e.Message
El parámetro no es correcto (The parameter is not correct)

e.Source
System.Security.Cryptography.Algorithms

e.StackTrace
at System.Security.Cryptography.RSAImplementation.RSACng.EncryptOrDecrypt(SafeNCryptKeyHandle key, Byte[] input, AsymmetricPaddingMode paddingMode, Void* paddingInfo, EncryptOrDecryptAction encryptOrDecrypt)
at System.Security.Cryptography.RSAImplementation.RSACng.EncryptOrDecrypt(Byte[] data, RSAEncryptionPadding padding, EncryptOrDecryptAction encryptOrDecrypt)
at System.Security.Cryptography.RSAImplementation.RSACng.Encrypt(Byte[] data, RSAEncryptionPadding padding)
at NETCore.Encrypt.EncryptProvider.RSAEncrypt(String publicKey, String srcString, RSAEncryptionPadding padding)

CreateAesKey returning repeated Keys

If run in a loop, keys are repeated

for (var i = 0; i < 25; i++)
{
    var key = EncryptProvider.CreateAesKey();

    Console.WriteLine(key.Key);
}

Expected result: 25 different keys

Actual result:

dVc1q1pt98Gu1u3tps48yAuiLNMVUp8f
BLifCe9NWESE4S9k5j9ILuPlcJwKKDFT
BLifCe9NWESE4S9k5j9ILuPlcJwKKDFT
BLifCe9NWESE4S9k5j9ILuPlcJwKKDFT
BLifCe9NWESE4S9k5j9ILuPlcJwKKDFT
iePteWbtebD1lxqNULBgV9a7jynzd2di
iePteWbtebD1lxqNULBgV9a7jynzd2di
iePteWbtebD1lxqNULBgV9a7jynzd2di
iePteWbtebD1lxqNULBgV9a7jynzd2di
iePteWbtebD1lxqNULBgV9a7jynzd2di
iePteWbtebD1lxqNULBgV9a7jynzd2di
iePteWbtebD1lxqNULBgV9a7jynzd2di
iePteWbtebD1lxqNULBgV9a7jynzd2di
iePteWbtebD1lxqNULBgV9a7jynzd2di
iePteWbtebD1lxqNULBgV9a7jynzd2di
iePteWbtebD1lxqNULBgV9a7jynzd2di
iePteWbtebD1lxqNULBgV9a7jynzd2di
iePteWbtebD1lxqNULBgV9a7jynzd2di
iePteWbtebD1lxqNULBgV9a7jynzd2di
iePteWbtebD1lxqNULBgV9a7jynzd2di
iePteWbtebD1lxqNULBgV9a7jynzd2di
iePteWbtebD1lxqNULBgV9a7jynzd2di
iePteWbtebD1lxqNULBgV9a7jynzd2di
iePteWbtebD1lxqNULBgV9a7jynzd2di
iePteWbtebD1lxqNULBgV9a7jynzd2di

.NET Core 3.1 Version

Do you have a version for core 3.1?

When I install NETCore.Encrypt to be run with IIS, I get the following:
"Could not load file or assembly 'NETCore.Encrypt, Version=2.0.9.0, Culture=neutral, PublicKeyToken=null'. The module was expected to contain an assembly manifest."

Research led me to (https://stackoverflow.com/questions/12226676/the-module-was-expected-to-contain-an-assembly-manifest).

In that article is the following:
"I found that I am using a different InstallUtil from my target .NET Framework. I am building a .NET Framework 4.5. Meanwhile, the error occurred if I am using the .NET Framework 2.0 release. Having used the right InstallUtil for my target .NET Framework, solved this problem!"

I then pulled down the source for NETCore.Encrypt and learned that it is written for netstandard2.1.

I am attempting to re-compile for core3.1 but should that fail, do you have plans for a core version?

No Support for .NetFramework Version 4.5

The package "NETCore.Encrypt 2.0.8" could not be installed. You are trying to install this package into a project that refers to ".NETFramework,Version=v4.5", but the package does not contain assembly references or content files that are compatible with this framework. Contact the package creator for more information.

Error encrypting json string with "new lines (\r\n)"

here is the code:

var key = EncryptProvider.CreateRsaKey();

var message = "{\r\n  \"LicenseId\": \"licId\",\r\n  \"MachineId\": \"macId\",\r\n  \"ApplicationId\": \"appId\",\r\n  \"ApplicationModuleIds\": [\r\n    \"modId\"\r\n  ]\r\n}";

var encrypted = EncryptProvider.RSAEncrypt(key.PublicKey, message); // throws here

it throws following error:

Internal.Cryptography.CryptoThrowHelper.WindowsCryptographicException: 'The parameter is incorrect'

EncryptProvider.RSAFromPublicPkcs 方法报错

AsnContentException: The provided data is tagged with 'Universal' class value '16', but it should have been 'Universal' class value '2'.
公钥和私钥 是 利用 支付宝开发平台开发助手 生成的 如下
image

公钥:MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyt4/XSnK6rp+FuRfawSsSqZn9kpa2c4c12wEHBa5ygdmLGlkFFOv0XGvvnBhhdyZBa+rrrdWkva+Dl9Zk42DpkDNRpkDpAEvdax0ViqZ4Rq4fK4Gs3uG4fBYIUoV2m55OqqqUzK+hlqBPTyh5jY5rHLZyJYWuWGhlFiM39YALVMvt5DqjaQBW0McrvKkID+y57VDOGS+MolM5yLgu/g0F9ph91zI/47K+421fB3mXd+ecMj82xQiR0MGrP9aZ0MbhAFFzHQrXm709+5zdgioGlXkplyZkjRT6uU55K7qtykhxBuxpbpw5AYPdjLdMr2X3JjiK8J7zyLI/HimGApO2QIDAQAB
私钥:MIIEpAIBAAKCAQEAyt4/XSnK6rp+FuRfawSsSqZn9kpa2c4c12wEHBa5ygdmLGlkFFOv0XGvvnBhhdyZBa+rrrdWkva+Dl9Zk42DpkDNRpkDpAEvdax0ViqZ4Rq4fK4Gs3uG4fBYIUoV2m55OqqqUzK+hlqBPTyh5jY5rHLZyJYWuWGhlFiM39YALVMvt5DqjaQBW0McrvKkID+y57VDOGS+MolM5yLgu/g0F9ph91zI/47K+421fB3mXd+ecMj82xQiR0MGrP9aZ0MbhAFFzHQrXm709+5zdgioGlXkplyZkjRT6uU55K7qtykhxBuxpbpw5AYPdjLdMr2X3JjiK8J7zyLI/HimGApO2QIDAQABAoIBACObdMW2Yy5mA2GjPfg7vr3vjUnWbTHTko5hICuJ9Zw3RkC/Utiag76gVLd5ZDSprpYn6ltlRKXQ9zTwmXljmlrg/ubITrJHnvvphBXnrlCrbvw7U2PHZ7pahC17onBPeanJcNHfkz9jvVFxRf1xQRg6pG0not9w+npePIPBPRC3PAMrpu3cXC7oqJb4tWGXRX7Gz3ckbkRSvvFQfXr5g/pqtchp7RdFAxroqhGeqn7lsIuXdg21L6IwrUmi4MkW68aUnC53IO3jPncqau10nw2MDdUmLJKdkcXXObIIY5fLQ2kZxuM2QcRf0Xv82OWmx/yUzXbGG3TEgA2HT/RbczECgYEA8ZC9bFUrppe5nxV5PKoXF8LHm5KGYQS+Lci2ZaOoeJMGecSTuDczE+2dWEpRrwG5mrKGGpOnUpqG0l0Ch6wo9QcyPZgaj2Yg5VAcGyaTBddgG1L2PK3wi8b8+IE1zOL5TxoiqSCd5o10LnNTGrqOXy6193XHHPpLc+540lX+7E0CgYEA1v2M64arAY89vtwOA/88O6tAy15Mc19mUoyIPMruQaEe8lgL/1/1HGIt8b2h1wy9AWC+zti5GA/llo/EVJcCzsqalQhpYRrc+a5Bh3jAsFhjrGl0WGDph2QiqbygASNUOkaCv3TzevIkV7lbs16Td10a7oxUeX7qUd8fPZaSQr0CgYEAqev6kv3GWsVXmQPt6DJtVBV7e3+ybwR7EpGhXBWnKEmjwHv6vRZ3I4l9qOF+W/CGsr7pfkBm7sAsHkW2xeDgXpvVR2Z7KGvar/OOEbssqGs7+3x8IWrpTimHQPcC9UCjxnTH9NgwukC+fP46cw7PnzyoW43JpiSads5ExxAe5fECgYEAuxjJLKdz5tWLvK+xGtViy+LLbrDQA4/AcpKOdal9E2xujCUHu+T8YQkoRrrrP0V8rthM9aIx4rji6taO27bX4LL9ODmry7AfIsL9kDIMLuudQow7jjY4xXTlnaXj8VmXkWePnaLfyd00t4s+PKlP2I8UQwmo8lr6/OkaPPTusFkCgYAqGXLKncmQsQLVyqNZi/qfdM8cvX8IrpkjyUs3opt+jLVn1JGfTtvWQXisM4KSTpiP/Y7PtDDk3cNm+DlhEz3c3JwjOGuzG0fG8BN5Xak1CR3fp0kuWeoR03EI8WAXR/GYH55TzfVQsbweRXhysr8HhZxezYloiyZkbQeDzt/P4g==

开发平台:.net 6

NETCore.Encrypt.OutofMaxlengthException trying to encrypt 123

Do you know why
var encrypted = EncryptProvider.RSAEncrypt(publicKey, "123");

Retrieves:
{"Exception of type 'NETCore.Encrypt.OutofMaxlengthException' was thrown."}

publicKey:

        private const string publicKey =
        @"{""Modulus"": ""m9c88+sazyrDZv7Amrek2MCkkx0ZkHfWXCCPZuZwT8gKEH4m/VDKj6hTVNr0GbZy8ZKtiq9NAxoS5Vr+xdsE9mVJu7XmU/s+D1GnF3cubckivKzCvs63sQQ9JpGmrOkIlfGbmGUprO0HEt3FA2fua/nGh67ApyLPykYXjMQI5QE="",
""Exponent"": ""AQAB""}";

`

Can we create RSA private/public key from Pem key?

Currently, I am trying to connect Angular RSA+AES encryption with your library on my Net Core.
All Angular libraries that I have found so far use PEM keys to encrypt/decrypt values

  1. Do you know if it is possible to encrypt data using Pem key and decrypt using simple (like Modulus, ...) key using your library?
  2. Do you know if it is possible to use Pem key in your library?

Really need your help!

Example of Pem key:


-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCxnBvS8cdsnAev2sRDRYWxznm1
QxZzaypfNXLvK7CDGk8TR7K+Pzsa+tpJfoyN/Z4B6xdlpsERo2Cu6AzolvrDLx5w
ZoI0kgdfaBMbUkdOB1m97zFYjKWoPeTskFzWZ3GHcQ3EXT0NJXXFXAskY45vEpbc
5qFgEhcPy3BMqHRibwIDAQAB
-----END PUBLIC KEY-----


-----BEGIN RSA PRIVATE KEY-----
MIICWwIBAAKBgQCxnBvS8cdsnAev2sRDRYWxznm1QxZzaypfNXLvK7CDGk8TR7K+
Pzsa+tpJfoyN/Z4B6xdlpsERo2Cu6AzolvrDLx5wZoI0kgdfaBMbUkdOB1m97zFY
jKWoPeTskFzWZ3GHcQ3EXT0NJXXFXAskY45vEpbc5qFgEhcPy3BMqHRibwIDAQAB
AoGAAdwpqm7fxh0S3jOYpJULeQ45gL11dGX7Pp4CWHYzq1vQ14SDtFxYfnLWwGLz
499zvSoSHP1pvjPgz6lxy9Rw8dUxCgvh8VQydMQzaug2XD1tkmtcSWInwFKBAfQ7
rceleyD0aK8JHJiuzM1p+yIJ/ImGK0Zk2U/svqrdJrNR4EkCQQDo3d5iWcjd3OLD
38k1GALEuN17KNpJqLvJcIEJl0pcHtOiNnyy2MR/XUghDpuxwhrhudB/TvX4tuI0
MUeVo5fjAkEAw0D6m9jkwE5uuEYN/l/84rbQ79p2I7r5Sk6zbMyBOvgl6CDlJyxY
434DDm6XW7c55ALrnlratEW5HPiPxuHZBQJANnE4vtGy7nvn4Fd/mRQmAYwe695f
On1iefP9lxpx3huu6uvGN6IKPqS2alQZ/nMdCc0Be+IgC6fmNsGWtNtsdQJAJvB4
ikgxJqD9t8ZQ2CAwgM5Q0OTSlsGdIdKcOeB3DVmbxbV5vdw8RfJFjcVEbkgWRYDH
mKcp4rXc+wgfNFyqOQJATZ1I5ER8AZAn5JMMH9zK+6oFvhLUgKyWO18W+dbcFrBd
AzlTB+HHYEIyTmaDtXWAwgBvJNIHk4BbM1meCH4QnA==
-----END RSA PRIVATE KEY-----

x509 certificate and RSA.

Very useful C# code, thank you. Sometimes we need the public key and private key in the x509 certificate to complete RSA encryption and decryption. If you can add this function, it will be more perfect.

命名和注释改进,异常建议用更适合的异常类,例如文件不存在用FileNotFoundException

    /// <summary>
    /// The validator of the parameters.
    /// </summary>
    public static class Validator
    {
        /// <summary>
        /// Validates whether the specified string is null or an empty string ("").
        /// </summary>
        /// <param name="value">The string to validate.</param>
        /// <param name="paramName">The name of the parameter that caused the current exception.</param>
        /// <example>
        /// string? value = null;
        /// Validator.ValidateNullOrEmpty(value, nameof(value));
        /// </example>
        /// <exception cref="ArgumentException">The exception that is thrown when one of the arguments provided to a method is not valid.</exception>
        public static void ValidateNullOrEmpty(string? value, string paramName)
        {
            if (value == null)
            {
                throw new ArgumentException(string.Format("\"{0}\" is null.", paramName), paramName);
            }
            if (value.Trim().Equals(string.Empty))
            {
                throw new ArgumentException(string.Format("\"{0}\" is an empty string (\"\").", paramName), paramName);
            }
        }

        /// <summary>
        /// Validates whether the given full name of the file refers to an existing file on disk.
        /// </summary>
        /// <param name="fileName">The full name of the file</param>
        /// <param name="paramName">The name of the parameter that caused the current exception.</param>
        /// <example>
        /// var fileName = @"D:\512.jpg";
        /// Validator.ValidateFileExists(fileName, nameof(fileName));
        /// </example>
        /// <exception cref="FileNotFoundException">The exception that is thrown when an attempt to access a file that does not exist on disk fails.</exception>
        public static void ValidateFileExists(string fileName, string paramName)
        {
            ValidateNullOrEmpty(fileName, paramName);

            if (!File.Exists(fileName))
            {
                throw new FileNotFoundException(string.Format("\"{0}\" cannot be found.", fileName), fileName);
            }
        }

        /// <summary>
        /// Validates whether the given path refers to an existing directory on disk.
        /// </summary>
        /// <param name="path">The path to validate.</param>
        /// <param name="paramName">The name of the parameter that caused the current exception.</param>
        /// <example>
        /// var path = @"D:\Projects\Test";
        /// Validator.ValidateDirectoryExists(path, nameof(path));
        /// </example>
        /// <exception cref="DirectoryNotFoundException">The exception that is thrown when part of a file or directory cannot be found.</exception>
        public static void ValidateDirectoryExists(string path, string paramName)
        {
            ValidateNullOrEmpty(path, paramName);

            if (!Directory.Exists(path))
            {
                throw new DirectoryNotFoundException(string.Format("\"{0}\" cannot be found.", path));
            }
        }
    }

字符串NullOrEmpty的判断非常实用,myloveCc的代码库给了我启发,非常感谢。

Encrypt/Decrypt Problem with RSA

When calling RSAEncrypt and RSADecrypt method in Linux/OS X , those two methods can not run well !

The main reason is that both Linux and OS X don't support RSAEncryptionPadding.OaepSHA512 !!

And RSAEncryptionPadding.OaepSHA512 is not optional in the source code !

Following EncryptProvider.cs#L364 and EncryptProvider.cs#L383

This is also the reason why the Unit Tests of RSA can not pass in my Mac book.

When I change RSAEncryptionPadding from OaepSHA512 to Pkcs1 , it runs well !

When calling RSA.Create() , it will create an instance of RSAOpenSsl in Linux , RSASecurityTransforms in OS X and RSACng in Windows.

Is there any other considerations to use RSAEncryptionPadding.OaepSHA512 ?

Decrypt Filestream does not working

Hello,

i tried to use netcore.encrypt to encrypt and decrypt a stream.
The process is: Load a filestream , then encrypt bytes , write to another file.
Next step is: Load the file, then decrypt bytes, do something with it.
Encrypt seems to be ok cause i can load the encrypted file here http://aes.online-domain-tools.com/ and decrypt. Is working.

But when i load the encrypted file into stream and then:

byte[] buffer = new byte[1024]; while (stream.Read(buffer, 0, buffer.Length) > 0) { var decryptedbytes = NETCore.Encrypt.EncryptProvider.AESDecrypt(buffer, key, iv); //DECRYPTDBYTES IS NULL!! }
The Problem is that the decryptedbytes is null

Can you help me?

rsa 异常

请问我的使用方式有问题吗?异常如下
Internal.Cryptography.CryptoThrowHelper+WindowsCryptographicException : 该项不存在。
at System.Security.Cryptography.CngKeyLite.ExportKeyBlob(SafeNCryptKeyHandle keyHandle, String blobType)
at System.Security.Cryptography.RSAImplementation.RSACng.ExportKeyBlob(Boolean includePrivateParameters)
代码如下

[Fact(DisplayName = "Rsa from pem test")]
        public void Rsa_From_Pem_Test()
        {
            //Act
            var pemPublicKey = @"
-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCxnBvS8cdsnAev2sRDRYWxznm1
QxZzaypfNXLvK7CDGk8TR7K+Pzsa+tpJfoyN/Z4B6xdlpsERo2Cu6AzolvrDLx5w
ZoI0kgdfaBMbUkdOB1m97zFYjKWoPeTskFzWZ3GHcQ3EXT0NJXXFXAskY45vEpbc
5qFgEhcPy3BMqHRibwIDAQAB
-----END PUBLIC KEY-----";

            var rsaFromPublickPem = EncryptProvider.RSAFromPem(pemPublicKey);

            var pemPrivateKey = @"
-----BEGIN RSA PRIVATE KEY-----
MIICWwIBAAKBgQCxnBvS8cdsnAev2sRDRYWxznm1QxZzaypfNXLvK7CDGk8TR7K+
Pzsa+tpJfoyN/Z4B6xdlpsERo2Cu6AzolvrDLx5wZoI0kgdfaBMbUkdOB1m97zFY
jKWoPeTskFzWZ3GHcQ3EXT0NJXXFXAskY45vEpbc5qFgEhcPy3BMqHRibwIDAQAB
AoGAAdwpqm7fxh0S3jOYpJULeQ45gL11dGX7Pp4CWHYzq1vQ14SDtFxYfnLWwGLz
499zvSoSHP1pvjPgz6lxy9Rw8dUxCgvh8VQydMQzaug2XD1tkmtcSWInwFKBAfQ7
rceleyD0aK8JHJiuzM1p+yIJ/ImGK0Zk2U/svqrdJrNR4EkCQQDo3d5iWcjd3OLD
38k1GALEuN17KNpJqLvJcIEJl0pcHtOiNnyy2MR/XUghDpuxwhrhudB/TvX4tuI0
MUeVo5fjAkEAw0D6m9jkwE5uuEYN/l/84rbQ79p2I7r5Sk6zbMyBOvgl6CDlJyxY
434DDm6XW7c55ALrnlratEW5HPiPxuHZBQJANnE4vtGy7nvn4Fd/mRQmAYwe695f
On1iefP9lxpx3huu6uvGN6IKPqS2alQZ/nMdCc0Be+IgC6fmNsGWtNtsdQJAJvB4
ikgxJqD9t8ZQ2CAwgM5Q0OTSlsGdIdKcOeB3DVmbxbV5vdw8RfJFjcVEbkgWRYDH
mKcp4rXc+wgfNFyqOQJATZ1I5ER8AZAn5JMMH9zK+6oFvhLUgKyWO18W+dbcFrBd
AzlTB+HHYEIyTmaDtXWAwgBvJNIHk4BbM1meCH4QnA==
-----END RSA PRIVATE KEY-----";

            var rsaFromPrivatePem = EncryptProvider.RSAFromPem(pemPrivateKey);

            //Assert
            Assert.NotNull(rsaFromPublickPem);
            Assert.NotNull(rsaFromPublickPem);
            Assert.Equal(rsaFromPublickPem.KeySize, rsaFromPrivatePem.KeySize);
            var privateKey= EncryptProvider.CreateRsaKey(rsaFromPrivatePem);
            var publicKey = EncryptProvider.CreateRsaKey(rsaFromPublickPem);
            var raw = "123123124";
            var signStr = EncryptProvider.RSASign(raw, privateKey.PrivateKey);
            var result = EncryptProvider.RSAVerify(signStr, signStr, publicKey.PublicKey);
            Assert.True(result);
        

Rsa加密、解密提供了默认的编码格式(hex),可以再提供一个可选的编码格式;或者直接接受、返回byte[];更灵活些。

类似如下的扩展方法:
public static string RSADecrypt(string privateKey, byte[] targetArray, RSAEncryptionPadding padding, bool isPemKey = false)
{
Check.Argument.IsNotEmpty(privateKey, nameof(privateKey));
Check.Argument.IsNotNull(targetArray, nameof(targetArray));
Check.Argument.IsNotNull(padding, nameof(padding));

        RSA rsa;
        if (isPemKey)
        {
            rsa = RsaProvider.FromPem(privateKey);
        }
        else
        {
            rsa = RSA.Create();
            rsa.FromJsonString(privateKey);
        }

        using (rsa)
        {
            byte[] decryptBytes = rsa.Decrypt(targetArray, padding);
            return Encoding.UTF8.GetString(decryptBytes);
        }
    }

How to RSADecrypt in PHP?

I have public and private key in my Net Core Web API, we create an encryption string (RSAWithPem) in our Net Core Web API and put the encrypted string into a query string of an url, the query string would be read by our PHP app and decrypt it (I have copied the private key into our PHP app for decryption), how to accomplish this?

need advice

Thanks

Encryption Key Chars

Is it safe to use the whole range of UTF-8 characters that are part of the byte in UTF-8 encoding?
I am referring to code points from U+0000 to U+007F at the following page https://en.wikipedia.org/wiki/UTF-8#Encoding and the characters related to that range (from U+0000 to U+007F) are at the following page https://www.utf8-chartable.de/.
I am asking this since I noticed not all the characters are used when generating keys with EncryptProvider.CreateAesKey(). The range being used in the source code is:
char[] arrChar = new char[]{ 'a','b','d','c','e','f','g','h','i','j','k','l','m','n','p','r','q','s','t','u','v','w','z','y','x', '0','1','2','3','4','5','6','7','8','9', 'A','B','C','D','E','F','G','H','I','J','K','L','M','N','Q','P','R','T','S','V','U','W','X','Y','Z' };

I tried using some UTF-8 codes outside of the range from code above but still in the range from U+0000 to U+007F and it worked fine.

Is it safe to use that kind of chars for encryption key?

From the following excerpt from the source code I can see that you are using Encoding.UTF8.GetBytes(...) to decode UTF chars to byte array so I guess it should be safe to use any of UTF-8 chars from the range U+0000 to U+007F for encryption key:

`public static byte[] AESDecrypt(byte[] data, string key, string vector)
{
Check.Argument.IsNotEmpty(data, nameof(data));

        Check.Argument.IsNotEmpty(key, nameof(key));
        Check.Argument.IsEqualLength(key.Length, 32, nameof(key));

        Check.Argument.IsNotEmpty(vector, nameof(vector));
        Check.Argument.IsEqualLength(vector.Length, 16, nameof(vector));

        byte[] encryptedBytes = data;
        byte[] bKey = new byte[32];
        Array.Copy(Encoding.UTF8.GetBytes(key.PadRight(bKey.Length)), bKey, bKey.Length);
        byte[] bVector = new byte[16];
        Array.Copy(Encoding.UTF8.GetBytes(vector.PadRight(bVector.Length)), bVector, bVector.Length);

        byte[] decryptedData = null; // decrypted data

        using (Aes Aes = Aes.Create())
        {
            try
            {
                using (MemoryStream memory = new MemoryStream(encryptedBytes))
                {
                    using (CryptoStream decryptor = new CryptoStream(memory, Aes.CreateDecryptor(bKey, bVector), CryptoStreamMode.Read))
                    {
                        using (MemoryStream tempMemory = new MemoryStream())
                        {
                            byte[] Buffer = new byte[1024];
                            Int32 readBytes = 0;
                            while ((readBytes = decryptor.Read(Buffer, 0, Buffer.Length)) > 0)
                            {
                                tempMemory.Write(Buffer, 0, readBytes);
                            }

                            decryptedData = tempMemory.ToArray();
                        }
                    }
                }
            }
            catch
            {
                decryptedData = null;
            }

            return decryptedData;
        }
    }`

Thanks!

Issue when using AESDecrypt

System.FormatException: 'Invalid length for a Base-64 char array or string.'
This is the exception.
I am able to successfully encrypt, but when I try to decrypt it throws an exception.

Why rsaKey.PublicKey == rsaKey.PrivateKey

Hi..

Why rsaKey.PublicKey == rsaKey.PrivateKey

var rsaKey = EncryptProvider.CreateRsaKey(RsaSize.R4096);

        string _publicKey = rsaKey.PublicKey;
        JObject _jo_public_key = JObject.Parse(_publicKey);
        string _public_key = (string)_jo_public_key["Modulus"];

        var _privateKey = rsaKey.PrivateKey;
        JObject _jo_private_key = JObject.Parse(_privateKey);
        string _private_key = (string)_jo_private_key["Modulus"];

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.