Skip to content

Commit 93b1375

Browse files
authored
Merge pull request #5 from myloveCc/master
Merge Original Repo
2 parents d3badeb + 1d905cb commit 93b1375

File tree

4 files changed

+87
-11
lines changed

4 files changed

+87
-11
lines changed

README.md

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
11
# NETCore.Encrypt [中文文档](http://www.cnblogs.com/piscesLoveCc/p/7423205.html)
22
[![NuGet](https://img.shields.io/nuget/v/NETCore.Encrypt.svg)](https://nuget.org/packages/NETCore.Encrypt)
33
[![NETCore CLR](https://img.shields.io/badge/.NETCore%20Clr-2.0-brightgreen.svg)](https://www.microsoft.com/net/core)
4+
[![NetStandard 2.0](https://img.shields.io/badge/NetStandard-2.0-orange.svg)](https://www.microsoft.com/net/core)
45
[![license](https://img.shields.io/github/license/myloveCc/NETCore.Encrypt.svg)](https://github.com/myloveCc/NETCore.Encrypt/blob/master/License)
56

67
NETCore encrypt and decrpty tool,Include AES,RSA,MD5,SAH1,SAH256,SHA384,SHA512 and more
78

89
To install NETCore.Encrypt, run the following command in the [Package Manager Console](https://docs.microsoft.com/zh-cn/nuget/tools/package-manager-console)
910
```
10-
Install-Package NETCore.Encrypt -Version 2.0.2
11+
Install-Package NETCore.Encrypt -Version 2.0.5
1112
```
1213

1314
***
@@ -111,7 +112,11 @@ Install-Package NETCore.Encrypt -Version 2.0.2
111112
var publicKey = rsaKey.PublicKey;
112113
var srcString = "rsa encrypt";
113114

115+
114116
var encrypted = EncryptProvider.RSAEncrypt(publicKey, srcString);
117+
118+
// On mac/linux at version 2.0.5
119+
var encrypted = EncryptProvider.RSAEncrypt(publicKey, srcString, RSAEncryptionPadding.Pkcs1);
115120
```
116121

117122
- #### RSA decrypt
@@ -121,6 +126,9 @@ Install-Package NETCore.Encrypt -Version 2.0.2
121126
var encryptedStr = "xxxx";
122127

123128
var decrypted = EncryptProvider.RSADecrypt(privateKey, encryptedStr);
129+
130+
// On mac/linux at version 2.0.5
131+
var encrypted = EncryptProvider.RSADecrypt(privateKey, encryptedStr, RSAEncryptionPadding.Pkcs1);
124132
```
125133

126134
- #### RSA from string (add at version 2.0.1)

src/NETCore.Encrypt/EncryptProvider.cs

Lines changed: 34 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ private static string GetRandomStr(int length)
3030
StringBuilder num = new StringBuilder();
3131

3232
Random rnd = new Random(DateTime.Now.Millisecond);
33-
for (int i = 0; i < length; i++)
33+
for (int i = 0;i < length;i++)
3434
{
3535
num.Append(arrChar[rnd.Next(0, arrChar.Length)].ToString());
3636
}
@@ -354,33 +354,62 @@ public static string DESDecrypt(string data, string key)
354354
/// <param name="srcString">src string</param>
355355
/// <returns>encrypted string</returns>
356356
public static string RSAEncrypt(string publicKey, string srcString)
357+
{
358+
string encryptStr = RSAEncrypt(publicKey, srcString, RSAEncryptionPadding.OaepSHA512);
359+
return encryptStr;
360+
}
361+
362+
/// <summary>
363+
/// RSA encrypt
364+
/// </summary>
365+
/// <param name="publicKey">public key</param>
366+
/// <param name="srcString">src string</param>
367+
/// <param name="padding">rsa encryptPadding <see cref="RSAEncryptionPadding"/> RSAEncryptionPadding.Pkcs1 for linux/mac openssl </param>
368+
/// <returns>encrypted string</returns>
369+
public static string RSAEncrypt(string publicKey, string srcString, RSAEncryptionPadding padding)
357370
{
358371
Check.Argument.IsNotEmpty(publicKey, nameof(publicKey));
359372
Check.Argument.IsNotEmpty(srcString, nameof(srcString));
373+
Check.Argument.IsNotNull(padding, nameof(padding));
360374

361375
using (RSA rsa = RSA.Create())
362376
{
363377
rsa.FromJsonString(publicKey);
364-
byte[] encryptBytes = rsa.Encrypt(Encoding.UTF8.GetBytes(srcString), RSAEncryptionPadding.Pkcs1);
378+
byte[] encryptBytes = rsa.Encrypt(Encoding.UTF8.GetBytes(srcString), padding);
365379
return encryptBytes.ToHexString();
366380
}
367381
}
382+
368383
/// <summary>
369384
/// RSA decrypt
370385
/// </summary>
371386
/// <param name="privateKey">private key</param>
372387
/// <param name="srcString">encrypted string</param>
373388
/// <returns>Decrypted string</returns>
374389
public static string RSADecrypt(string privateKey, string srcString)
390+
{
391+
string decryptStr = RSADecrypt(privateKey, srcString, RSAEncryptionPadding.OaepSHA512);
392+
return decryptStr;
393+
}
394+
395+
/// <summary>
396+
/// RSA encrypt
397+
/// </summary>
398+
/// <param name="publicKey">public key</param>
399+
/// <param name="srcString">src string</param>
400+
/// <param name="padding">rsa encryptPadding <see cref="RSAEncryptionPadding"/> RSAEncryptionPadding.Pkcs1 for linux/mac openssl </param>
401+
/// <returns>encrypted string</returns>
402+
public static string RSADecrypt(string privateKey, string srcString, RSAEncryptionPadding padding)
375403
{
376404
Check.Argument.IsNotEmpty(privateKey, nameof(privateKey));
377405
Check.Argument.IsNotEmpty(srcString, nameof(srcString));
406+
Check.Argument.IsNotNull(padding, nameof(padding));
378407

379408
using (RSA rsa = RSA.Create())
380409
{
381410
rsa.FromJsonString(privateKey);
382411
byte[] srcBytes = srcString.ToBytes();
383-
byte[] decryptBytes = rsa.Decrypt(srcBytes, RSAEncryptionPadding.Pkcs1);
412+
byte[] decryptBytes = rsa.Decrypt(srcBytes, padding);
384413
return Encoding.UTF8.GetString(decryptBytes);
385414
}
386415
}
@@ -408,7 +437,7 @@ public static RSAKey CreateRsaKey(RsaSize rsaSize = RsaSize.R2048)
408437
{
409438
using (RSA rsa = RSA.Create())
410439
{
411-
rsa.KeySize = (int)RsaSize.R2048;
440+
rsa.KeySize = (int) RsaSize.R2048;
412441

413442
string publicKey = rsa.ToJsonString(false);
414443
string privateKey = rsa.ToJsonString(true);
@@ -732,7 +761,7 @@ private static string CreateMachineKey(int length)
732761
rng.GetBytes(random);
733762

734763
StringBuilder machineKey = new StringBuilder(length);
735-
for (int i = 0; i < random.Length; i++)
764+
for (int i = 0;i < random.Length;i++)
736765
{
737766
machineKey.Append(string.Format("{0:X2}", random[i]));
738767
}

src/NETCore.Encrypt/NETCore.Encrypt.csproj

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,10 @@
1212
<PackageProjectUrl>https://github.com/myloveCc/NETCore.Encrypt</PackageProjectUrl>
1313
<RepositoryUrl>https://github.com/myloveCc/NETCore.Encrypt</RepositoryUrl>
1414
<RepositoryType>Github</RepositoryType>
15-
<AssemblyVersion>2.0.3.0</AssemblyVersion>
16-
<FileVersion>2.0.3.0</FileVersion>
17-
<Version>2.0.3</Version>
18-
<PackageReleaseNotes>MD5 hash result's length support 16 and 32.</PackageReleaseNotes>
15+
<AssemblyVersion>2.0.5.0</AssemblyVersion>
16+
<FileVersion>2.0.5.0</FileVersion>
17+
<Version>2.0.5</Version>
18+
<PackageReleaseNotes>Add new RSAEncrypt,RSADecrypt method for custom RSAEncryptionPadding</PackageReleaseNotes>
1919
</PropertyGroup>
2020

2121
<ItemGroup>

test/NETCore.Encrypt.Tests/RSA_Tests.cs

Lines changed: 40 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
using System.Text;
44
using Xunit;
55
using NETCore.Encrypt;
6+
using System.Security.Cryptography;
67

78
namespace NETCore.Encrypt.Tests
89
{
@@ -27,7 +28,6 @@ public void Create_RSAKey_Test(RsaSize size)
2728
}
2829

2930
[Theory]
30-
3131
[InlineData(RsaSize.R2048)]
3232
[InlineData(RsaSize.R3072)]
3333
[InlineData(RsaSize.R4096)]
@@ -43,6 +43,23 @@ public void Rsa_Encrypt_Success_Test(RsaSize size)
4343
Assert.NotEmpty(encrypted);
4444
}
4545

46+
[Theory(DisplayName = "Rsa encrypt with custom RSAEncryptionPadding")]
47+
[InlineData(RsaSize.R2048)]
48+
[InlineData(RsaSize.R3072)]
49+
[InlineData(RsaSize.R4096)]
50+
public void Rsa_Encrypt_WithPadding_Test(RsaSize size)
51+
{
52+
var rsaKey = EncryptProvider.CreateRsaKey(size);
53+
var srcString = "rsa encrypt";
54+
55+
//Act
56+
var encrypted = EncryptProvider.RSAEncrypt(rsaKey.PublicKey, srcString, RSAEncryptionPadding.Pkcs1);
57+
58+
//Assert
59+
Assert.NotEmpty(encrypted);
60+
}
61+
62+
4663
[Fact(DisplayName = "Rsa encrypt fail with emtpy key")]
4764
public void Rsa_Encrypt_EmptyKey_Test()
4865
{
@@ -82,6 +99,28 @@ public void Rsa_Decrypt_Success_Test(RsaSize size)
8299
Assert.Equal(srcString, decrypted);
83100
}
84101

102+
103+
[Theory(DisplayName = "Rsa decrypt with custom RSAEncryptionPadding")]
104+
[InlineData(RsaSize.R2048)]
105+
[InlineData(RsaSize.R3072)]
106+
[InlineData(RsaSize.R4096)]
107+
public void Rsa_Decrypt_WithPadding_Test(RsaSize size)
108+
{
109+
var rsaKey = EncryptProvider.CreateRsaKey(size);
110+
var srcString = "rsa decrypt";
111+
112+
//Act
113+
var padding = RSAEncryptionPadding.Pkcs1;
114+
var encrypted = EncryptProvider.RSAEncrypt(rsaKey.PublicKey, srcString, padding);
115+
var decrypted = EncryptProvider.RSADecrypt(rsaKey.PrivateKey, encrypted, padding);
116+
117+
//Assert
118+
Assert.NotEmpty(encrypted);
119+
Assert.NotEmpty(decrypted);
120+
Assert.Equal(srcString, decrypted);
121+
}
122+
123+
85124
[Fact(DisplayName = "Rsa decrypt fail with emtpy key")]
86125
public void Rsa_Decrypt_EmptyKey_Test()
87126
{

0 commit comments

Comments
 (0)