@@ -14,7 +14,7 @@ namespace GBNewEnergy.Protocol.Test | |||||
{ | { | ||||
private readonly NEGlobalConfigs NEGlobalConfigs = new NEGlobalConfigs() | private readonly NEGlobalConfigs NEGlobalConfigs = new NEGlobalConfigs() | ||||
{ | { | ||||
NEEncryptKey="smallchi" | |||||
}; | }; | ||||
#region 车辆登入 | #region 车辆登入 | ||||
[Fact] | [Fact] | ||||
@@ -1,30 +1,31 @@ | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.IO; | |||||
using System.IO; | |||||
using System.Security.Cryptography; | using System.Security.Cryptography; | ||||
using System.Text; | |||||
namespace GBNewEnergy.Protocol.NEEncrypts | namespace GBNewEnergy.Protocol.NEEncrypts | ||||
{ | { | ||||
public class NEAES128EncryptImpl : INEEncrypt | |||||
public class Default_NEAES128EncryptImpl : NEAESBase | |||||
{ | { | ||||
private readonly NEGlobalConfigs _nEConfigs; | |||||
public override string PrivateKey { get; } | |||||
/// <summary> | |||||
/// 盐字节必须为至少8个字节 | |||||
/// </summary> | |||||
private readonly static byte[] saltBytes = new byte[9] { 13, 34, 27, 67, 189, 255, 104, 219, 122 }; | |||||
public override byte[] SaltBytes { get; } | |||||
public NEAES128EncryptImpl(NEGlobalConfigs nEConfigs) | |||||
public Default_NEAES128EncryptImpl(string privateKey) | |||||
{ | { | ||||
_nEConfigs = nEConfigs; | |||||
PrivateKey = privateKey; | |||||
SaltBytes = new byte[9] { 13, 34, 27, 67, 189, 255, 104, 219, 122 }; | |||||
} | } | ||||
public byte[] Encrypt(byte[] buffer) | |||||
public Default_NEAES128EncryptImpl(string privateKey, byte[] saltBytes) | |||||
{ | |||||
PrivateKey = privateKey; | |||||
SaltBytes = saltBytes; | |||||
} | |||||
public override byte[] Encrypt(byte[] buffer) | |||||
{ | { | ||||
using (Aes encryptor = Aes.Create()) | using (Aes encryptor = Aes.Create()) | ||||
{ | { | ||||
Rfc2898DeriveBytes pdb = new Rfc2898DeriveBytes(_nEConfigs.NEEncryptKey, saltBytes); | |||||
Rfc2898DeriveBytes pdb = new Rfc2898DeriveBytes(PrivateKey, SaltBytes); | |||||
encryptor.Key = pdb.GetBytes(32); | encryptor.Key = pdb.GetBytes(32); | ||||
encryptor.IV = pdb.GetBytes(16); | encryptor.IV = pdb.GetBytes(16); | ||||
using (MemoryStream ms = new MemoryStream()) | using (MemoryStream ms = new MemoryStream()) | ||||
@@ -37,11 +38,11 @@ namespace GBNewEnergy.Protocol.NEEncrypts | |||||
} | } | ||||
} | } | ||||
public byte[] Decrypt(byte[] buffer) | |||||
public override byte[] Decrypt(byte[] buffer) | |||||
{ | { | ||||
using (Aes encryptor = Aes.Create()) | using (Aes encryptor = Aes.Create()) | ||||
{ | { | ||||
Rfc2898DeriveBytes pdb = new Rfc2898DeriveBytes(_nEConfigs.NEEncryptKey, saltBytes); | |||||
Rfc2898DeriveBytes pdb = new Rfc2898DeriveBytes(PrivateKey, SaltBytes); | |||||
encryptor.Key = pdb.GetBytes(32); | encryptor.Key = pdb.GetBytes(32); | ||||
encryptor.IV = pdb.GetBytes(16); | encryptor.IV = pdb.GetBytes(16); | ||||
using (MemoryStream ms = new MemoryStream()) | using (MemoryStream ms = new MemoryStream()) |
@@ -0,0 +1,193 @@ | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.IO; | |||||
using System.Security.Cryptography; | |||||
using System.Text; | |||||
using System.Xml; | |||||
namespace GBNewEnergy.Protocol.NEEncrypts | |||||
{ | |||||
#if NETSTANDARD2_0 | |||||
public class Default_NERSAEncryptImpl : NERSABase | |||||
{ | |||||
private readonly RSA _privateKeyRsaProvider; | |||||
private readonly RSA _publicKeyRsaProvider; | |||||
private readonly Encoding _encoding; | |||||
public override string HashAlgorithmStr=>throw new NotImplementedException(); | |||||
public override string PublicKey { get; } | |||||
public override string PrivateKey { get; } | |||||
public override HashAlgorithmName HashAlgorithmName { get; } | |||||
public Default_NERSAEncryptImpl(Encoding encoding, HashAlgorithmName hashAlgorithmName, string publicKey, string privateKey) | |||||
{ | |||||
_privateKeyRsaProvider = CreateRsaProviderFromPrivateKey(privateKey); | |||||
_publicKeyRsaProvider = CreateRsaProviderFromPublicKey(publicKey); | |||||
HashAlgorithmName = hashAlgorithmName; | |||||
_encoding = encoding; | |||||
PublicKey = publicKey; | |||||
PrivateKey = privateKey; | |||||
} | |||||
public override byte[] Decrypt(byte[] buffer) | |||||
{ | |||||
return _privateKeyRsaProvider.Decrypt(buffer, RSAEncryptionPadding.Pkcs1); | |||||
} | |||||
public override byte[] Encrypt(byte[] buffer) | |||||
{ | |||||
return _publicKeyRsaProvider.Encrypt(buffer, RSAEncryptionPadding.Pkcs1); | |||||
} | |||||
/// <summary> | |||||
/// 使用私钥签名 | |||||
/// </summary> | |||||
/// <param name="data">原始数据</param> | |||||
/// <returns></returns> | |||||
public override string Sign(string data) | |||||
{ | |||||
byte[] dataBytes = _encoding.GetBytes(data); | |||||
var signatureBytes = _privateKeyRsaProvider.SignData(dataBytes, HashAlgorithmName, RSASignaturePadding.Pkcs1); | |||||
return Convert.ToBase64String(signatureBytes); | |||||
} | |||||
/// <summary> | |||||
/// 使用公钥验证签名 | |||||
/// </summary> | |||||
/// <param name="data">原始数据</param> | |||||
/// <param name="sign">签名</param> | |||||
/// <returns></returns> | |||||
public override bool Verify(string data, string sign) | |||||
{ | |||||
byte[] dataBytes = _encoding.GetBytes(data); | |||||
byte[] signBytes = Convert.FromBase64String(sign); | |||||
var verify = _publicKeyRsaProvider.VerifyData(dataBytes, signBytes, HashAlgorithmName, RSASignaturePadding.Pkcs1); | |||||
return verify; | |||||
} | |||||
private RSA CreateRsaProviderFromPublicKey(string publicKeyString) | |||||
{ | |||||
var rsa = RSA.Create(); | |||||
FromXmlStringExtensions(rsa,publicKeyString); | |||||
return rsa; | |||||
} | |||||
private RSA CreateRsaProviderFromPrivateKey(string privateKey) | |||||
{ | |||||
var rsa = RSA.Create(); | |||||
FromXmlStringExtensions(rsa, privateKey); | |||||
return rsa; | |||||
} | |||||
private int GetIntegerSize(BinaryReader binr) | |||||
{ | |||||
byte bt = 0; | |||||
int count = 0; | |||||
bt = binr.ReadByte(); | |||||
if (bt != 0x02) | |||||
return 0; | |||||
bt = binr.ReadByte(); | |||||
if (bt == 0x81) | |||||
count = binr.ReadByte(); | |||||
else | |||||
if (bt == 0x82) | |||||
{ | |||||
var highbyte = binr.ReadByte(); | |||||
var lowbyte = binr.ReadByte(); | |||||
byte[] modint = { lowbyte, highbyte, 0x00, 0x00 }; | |||||
count = BitConverter.ToInt32(modint, 0); | |||||
} | |||||
else | |||||
{ | |||||
count = bt; | |||||
} | |||||
while (binr.ReadByte() == 0x00) | |||||
{ | |||||
count -= 1; | |||||
} | |||||
binr.BaseStream.Seek(-1, SeekOrigin.Current); | |||||
return count; | |||||
} | |||||
private bool CompareBytearrays(byte[] a, byte[] b) | |||||
{ | |||||
if (a.Length != b.Length) | |||||
return false; | |||||
int i = 0; | |||||
foreach (byte c in a) | |||||
{ | |||||
if (c != b[i]) | |||||
return false; | |||||
i++; | |||||
} | |||||
return true; | |||||
} | |||||
private static void FromXmlStringExtensions(RSA rsa, string xmlString) | |||||
{ | |||||
var parameters = new RSAParameters(); | |||||
var xmlDoc = new XmlDocument(); | |||||
xmlDoc.LoadXml(xmlString); | |||||
if (xmlDoc.DocumentElement.Name.Equals("RSAKeyValue")) | |||||
{ | |||||
foreach (XmlNode node in xmlDoc.DocumentElement.ChildNodes) | |||||
{ | |||||
switch (node.Name) | |||||
{ | |||||
case "Modulus": | |||||
parameters.Modulus = (string.IsNullOrEmpty(node.InnerText) | |||||
? null | |||||
: Convert.FromBase64String(node.InnerText)); | |||||
break; | |||||
case "Exponent": | |||||
parameters.Exponent = (string.IsNullOrEmpty(node.InnerText) | |||||
? null | |||||
: Convert.FromBase64String(node.InnerText)); | |||||
break; | |||||
case "P": | |||||
parameters.P = (string.IsNullOrEmpty(node.InnerText) | |||||
? null | |||||
: Convert.FromBase64String(node.InnerText)); | |||||
break; | |||||
case "Q": | |||||
parameters.Q = (string.IsNullOrEmpty(node.InnerText) | |||||
? null | |||||
: Convert.FromBase64String(node.InnerText)); | |||||
break; | |||||
case "DP": | |||||
parameters.DP = (string.IsNullOrEmpty(node.InnerText) | |||||
? null | |||||
: Convert.FromBase64String(node.InnerText)); | |||||
break; | |||||
case "DQ": | |||||
parameters.DQ = (string.IsNullOrEmpty(node.InnerText) | |||||
? null | |||||
: Convert.FromBase64String(node.InnerText)); | |||||
break; | |||||
case "InverseQ": | |||||
parameters.InverseQ = (string.IsNullOrEmpty(node.InnerText) | |||||
? null | |||||
: Convert.FromBase64String(node.InnerText)); | |||||
break; | |||||
case "D": | |||||
parameters.D = (string.IsNullOrEmpty(node.InnerText) | |||||
? null | |||||
: Convert.FromBase64String(node.InnerText)); | |||||
break; | |||||
} | |||||
} | |||||
} | |||||
else | |||||
{ | |||||
throw new Exception("Invalid XML RSA key."); | |||||
} | |||||
rsa.ImportParameters(parameters); | |||||
} | |||||
} | |||||
#endif | |||||
} |
@@ -0,0 +1,90 @@ | |||||
using System; | |||||
using System.Security.Cryptography; | |||||
using System.Text; | |||||
namespace GBNewEnergy.Protocol.NEEncrypts | |||||
{ | |||||
public class Default_NERSAEncryptImpl_NET : NERSABase | |||||
{ | |||||
private readonly Encoding _encoding; | |||||
public Default_NERSAEncryptImpl_NET(Encoding encoding,string hashAlgorithmStr, string publicKey, string privateKey) | |||||
{ | |||||
_encoding = encoding; | |||||
HashAlgorithmStr = hashAlgorithmStr; | |||||
PublicKey = publicKey; | |||||
PrivateKey = privateKey; | |||||
} | |||||
#if NETSTANDARD2_0 | |||||
public override HashAlgorithmName HashAlgorithmName => throw new NotImplementedException(); | |||||
#endif | |||||
public override string HashAlgorithmStr { get;} | |||||
public override string PublicKey { get; } | |||||
public override string PrivateKey { get;} | |||||
public override byte[] Decrypt(byte[] buffer) | |||||
{ | |||||
using (RSACryptoServiceProvider provider=new RSACryptoServiceProvider()) | |||||
{ | |||||
provider.FromXmlString(PrivateKey); | |||||
return provider.Decrypt(buffer, false); | |||||
} | |||||
} | |||||
public override byte[] Encrypt(byte[] buffer) | |||||
{ | |||||
using (RSACryptoServiceProvider provider = new RSACryptoServiceProvider()) | |||||
{ | |||||
provider.FromXmlString(PublicKey); | |||||
return provider.Encrypt(buffer, false); | |||||
} | |||||
} | |||||
/// <summary> | |||||
/// 使用私钥签名 | |||||
/// </summary> | |||||
/// <param name="data">原始数据</param> | |||||
/// <returns></returns> | |||||
public override string Sign(string data) | |||||
{ | |||||
byte[] dataBytes = _encoding.GetBytes(data); | |||||
byte[] rgbHash = HashAlgorithm.Create(HashAlgorithmStr).ComputeHash(dataBytes); | |||||
using (RSACryptoServiceProvider key = new RSACryptoServiceProvider()) | |||||
{ | |||||
key.FromXmlString(PrivateKey); | |||||
RSAPKCS1SignatureFormatter formatter = new RSAPKCS1SignatureFormatter(key); | |||||
formatter.SetHashAlgorithm(HashAlgorithmStr); | |||||
byte[] inArray = formatter.CreateSignature(rgbHash); | |||||
return Convert.ToBase64String(inArray); | |||||
} | |||||
} | |||||
/// <summary> | |||||
/// 使用公钥验证签名 | |||||
/// </summary> | |||||
/// <param name="data">原始数据</param> | |||||
/// <param name="sign">签名</param> | |||||
/// <returns></returns> | |||||
public override bool Verify(string data, string sign) | |||||
{ | |||||
byte[] dataBytes = _encoding.GetBytes(data); | |||||
byte[] signBytes = Convert.FromBase64String(sign); | |||||
byte[] rgbHash = HashAlgorithm.Create(HashAlgorithmStr).ComputeHash(dataBytes); | |||||
using (RSACryptoServiceProvider key = new RSACryptoServiceProvider()) | |||||
{ | |||||
key.FromXmlString(PublicKey); | |||||
RSAPKCS1SignatureDeformatter deformatter = new RSAPKCS1SignatureDeformatter(key); | |||||
deformatter.SetHashAlgorithm(HashAlgorithmStr); | |||||
byte[] rgbSignature = Convert.FromBase64String(sign); | |||||
if (deformatter.VerifySignature(rgbHash, rgbSignature)) | |||||
{ | |||||
return true; | |||||
} | |||||
return false; | |||||
} | |||||
} | |||||
} | |||||
} |
@@ -0,0 +1,14 @@ | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Text; | |||||
namespace GBNewEnergy.Protocol.NEEncrypts | |||||
{ | |||||
public abstract class NEAESBase : INEEncrypt | |||||
{ | |||||
public abstract string PrivateKey { get; } | |||||
public abstract byte[] SaltBytes { get; } | |||||
public abstract byte[] Decrypt(byte[] buffer); | |||||
public abstract byte[] Encrypt(byte[] buffer); | |||||
} | |||||
} |
@@ -0,0 +1,45 @@ | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Security.Cryptography; | |||||
using System.Text; | |||||
namespace GBNewEnergy.Protocol.NEEncrypts | |||||
{ | |||||
public abstract class NERSABase : INEEncrypt | |||||
{ | |||||
public abstract byte[] Decrypt(byte[] buffer); | |||||
public abstract byte[] Encrypt(byte[] buffer); | |||||
#if NETSTANDARD2_0 | |||||
/// <summary> | |||||
/// dotnet core 使用 | |||||
/// </summary> | |||||
public abstract HashAlgorithmName HashAlgorithmName { get; } | |||||
#endif | |||||
/// <summary> | |||||
/// .net framework 使用 | |||||
/// 哈希算法 | |||||
/// MD5 new MD5CryptoServiceProvider() | |||||
/// SHA1 new SHA1CryptoServiceProvider() | |||||
/// SHA256 new SHA256CryptoServiceProvider() | |||||
/// SHA384 new SHA384CryptoServiceProvider() | |||||
/// SHA512 new SHA512CryptoServiceProvider() | |||||
/// </summary> | |||||
public abstract string HashAlgorithmStr { get; } | |||||
public abstract string PublicKey { get; } | |||||
public abstract string PrivateKey { get; } | |||||
/// <summary> | |||||
/// 使用私钥签名 | |||||
/// </summary> | |||||
/// <param name="data">原始数据</param> | |||||
/// <returns></returns> | |||||
public abstract bool Verify(string data, string sign); | |||||
/// <summary> | |||||
/// 使用公钥验证签名 | |||||
/// </summary> | |||||
/// <param name="data">原始数据</param> | |||||
/// <param name="sign">签名</param> | |||||
/// <returns></returns> | |||||
public abstract string Sign(string data); | |||||
} | |||||
} |
@@ -1,27 +0,0 @@ | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Text; | |||||
namespace GBNewEnergy.Protocol.NEEncrypts | |||||
{ | |||||
#warning 待加解密 | |||||
public class NERSAEncryptImpl : INEEncrypt | |||||
{ | |||||
private readonly NEGlobalConfigs _nEConfigs; | |||||
public NERSAEncryptImpl(NEGlobalConfigs nEConfigs) | |||||
{ | |||||
_nEConfigs = nEConfigs; | |||||
} | |||||
public byte[] Decrypt(byte[] buffer) | |||||
{ | |||||
throw new NotImplementedException(); | |||||
} | |||||
public byte[] Encrypt(byte[] buffer) | |||||
{ | |||||
throw new NotImplementedException(); | |||||
} | |||||
} | |||||
} |
@@ -1,6 +1,4 @@ | |||||
using GBNewEnergy.Protocol.Enums; | using GBNewEnergy.Protocol.Enums; | ||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Text; | using System.Text; | ||||
namespace GBNewEnergy.Protocol | namespace GBNewEnergy.Protocol | ||||
@@ -8,9 +6,9 @@ namespace GBNewEnergy.Protocol | |||||
public class NEGlobalConfigs | public class NEGlobalConfigs | ||||
{ | { | ||||
/// <summary> | /// <summary> | ||||
/// 密钥 | |||||
/// 加密编码 | |||||
/// </summary> | /// </summary> | ||||
public string NEEncryptKey { get; set; } | |||||
public Encoding NEEncryptEncoding { get; set; } = Encoding.UTF8; | |||||
/// <summary> | /// <summary> | ||||
/// 数据单元加密方式 | /// 数据单元加密方式 | ||||
/// 0x01:数据不加密;0x02:数据经过 RSA 算法加密;0x03:数据经过 AES128 位算法加密;“0xFE”表示异常,“0xFF”表示无效 | /// 0x01:数据不加密;0x02:数据经过 RSA 算法加密;0x03:数据经过 AES128 位算法加密;“0xFE”表示异常,“0xFF”表示无效 | ||||
@@ -13,17 +13,33 @@ namespace NEEncryptsNET4.Test | |||||
{ | { | ||||
static void Main(string[] args) | static void Main(string[] args) | ||||
{ | { | ||||
NEAES128EncryptImpl nE_AES128EncryptImpl = new NEAES128EncryptImpl( | |||||
new GBNewEnergy.Protocol.NEGlobalConfigs() | |||||
{ | |||||
NEEncryptKey="smallchi" | |||||
}); | |||||
Default_NEAES128EncryptImpl nE_AES128EncryptImpl = new Default_NEAES128EncryptImpl("smallchi"); | |||||
string str = "aaasssddd123"; | string str = "aaasssddd123"; | ||||
var bytes = Encoding.UTF8.GetBytes(str); | var bytes = Encoding.UTF8.GetBytes(str); | ||||
var encrypt=nE_AES128EncryptImpl.Encrypt(bytes); | |||||
Console.WriteLine("原数据:"+ str); | |||||
Console.WriteLine("加密后:"+ encrypt.ToHexString()); | |||||
var encrypt = nE_AES128EncryptImpl.Encrypt(bytes); | |||||
Console.WriteLine("原数据:" + str); | |||||
Console.WriteLine("加密后:" + encrypt.ToHexString()); | |||||
Console.WriteLine("解密后:" + Encoding.UTF8.GetString(nE_AES128EncryptImpl.Decrypt(encrypt))); | Console.WriteLine("解密后:" + Encoding.UTF8.GetString(nE_AES128EncryptImpl.Decrypt(encrypt))); | ||||
Default_NERSAEncryptImpl_NET rsa = new Default_NERSAEncryptImpl_NET(Encoding.UTF8, | |||||
"SHA256", | |||||
"<RSAKeyValue><Modulus>s+rl5mtcckCF9mEECD86L9UE2pbCR4CuiqDepwpiZCEflymQLNC3qNUPDlua9/kltyu6L489uimHRbEp4C7Gl7dDmaXVZLUVGkgUCZoRc8MrOw4+BiVAeQtCDdilPpA7DMN0bMfJAj3U4GuTU89/OWZMb9SYFfqEHM2e60PZHIU=</Modulus><Exponent>AQAB</Exponent><P>8qSTX42w2NaMCXL0PTZuacUFdJj93KopOJPD2q/JfmXSjXHV/IQK9YlCVKXHucqy8xcQgjkaKHqy3Rse14SZ7Q==</P><Q>vdJfDZ6ZIAQDx0sQbmbadHb6EOr8/oXo8B1CUSG0LqFZgDY7vBj17ujd6UhJWzhsg/5/3L+m4wDjMkUpOExZ+Q==</Q><DP>Av3Uc1Ej5QiAIX2xVS/enJ85Of7I4neWmoP33jJcoZpPxj6pDLv0BqLylmiU1c2R9z1JjtF1aRpaKi+zaaTQ4Q==</DP><DQ>Pv5yhv2MCYDrlBbIJCtD8gSN5lFllj3wWMcM/Am4VwU6w368Aicybo+fHUzc80XdVUx/OE3t30WrIEKtdD56WQ==</DQ><InverseQ>OcUQg0/kEGi9l2CgXCLKmQ1/1VVb+r89LXTO6rqi2wg5txkJIIXXePx7ce0Bh0eEnZzeSudwBLA3kqXmeAyYaw==</InverseQ><D>mnPL+zwtd7OmjTUJ5h6JUCi56wFDNWjl7gJeQd4rSzQYT4eRyrc/A4QsUbIYXkqXsyCpzExWvGsMQqrtfRQKzR53MBL3MQln5BjAUql2NqCkM2KT/D8Px5M21/TpMAycK4tGLOHgcCQRH1PQLHG1OfpfDASIzLwLgMjvMuHnIyE=</D></RSAKeyValue>", | |||||
"<RSAKeyValue><Modulus>s+rl5mtcckCF9mEECD86L9UE2pbCR4CuiqDepwpiZCEflymQLNC3qNUPDlua9/kltyu6L489uimHRbEp4C7Gl7dDmaXVZLUVGkgUCZoRc8MrOw4+BiVAeQtCDdilPpA7DMN0bMfJAj3U4GuTU89/OWZMb9SYFfqEHM2e60PZHIU=</Modulus><Exponent>AQAB</Exponent><P>8qSTX42w2NaMCXL0PTZuacUFdJj93KopOJPD2q/JfmXSjXHV/IQK9YlCVKXHucqy8xcQgjkaKHqy3Rse14SZ7Q==</P><Q>vdJfDZ6ZIAQDx0sQbmbadHb6EOr8/oXo8B1CUSG0LqFZgDY7vBj17ujd6UhJWzhsg/5/3L+m4wDjMkUpOExZ+Q==</Q><DP>Av3Uc1Ej5QiAIX2xVS/enJ85Of7I4neWmoP33jJcoZpPxj6pDLv0BqLylmiU1c2R9z1JjtF1aRpaKi+zaaTQ4Q==</DP><DQ>Pv5yhv2MCYDrlBbIJCtD8gSN5lFllj3wWMcM/Am4VwU6w368Aicybo+fHUzc80XdVUx/OE3t30WrIEKtdD56WQ==</DQ><InverseQ>OcUQg0/kEGi9l2CgXCLKmQ1/1VVb+r89LXTO6rqi2wg5txkJIIXXePx7ce0Bh0eEnZzeSudwBLA3kqXmeAyYaw==</InverseQ><D>mnPL+zwtd7OmjTUJ5h6JUCi56wFDNWjl7gJeQd4rSzQYT4eRyrc/A4QsUbIYXkqXsyCpzExWvGsMQqrtfRQKzR53MBL3MQln5BjAUql2NqCkM2KT/D8Px5M21/TpMAycK4tGLOHgcCQRH1PQLHG1OfpfDASIzLwLgMjvMuHnIyE=</D></RSAKeyValue>" | |||||
); | |||||
Console.WriteLine("原始字符串:" + str); | |||||
//加密 | |||||
byte[] enBytes = rsa.Encrypt(Encoding.UTF8.GetBytes(str)); | |||||
Console.WriteLine("加密字符串:" + enBytes.ToHexString()); | |||||
//解密 | |||||
byte[] deBytes = rsa.Decrypt(enBytes); | |||||
Console.WriteLine("解密字符串:" + Encoding.UTF8.GetString(deBytes)); | |||||
//私钥签名 | |||||
string signStr = rsa.Sign(str); | |||||
Console.WriteLine("字符串签名:" + signStr); | |||||
//公钥验证签名 | |||||
bool signVerify = rsa.Verify(str, signStr); | |||||
Console.WriteLine("验证签名:" + signVerify); | |||||
Console.ReadKey(); | Console.ReadKey(); | ||||
} | } | ||||
} | } | ||||
@@ -12,17 +12,33 @@ namespace NEEncryptsNET45.Test | |||||
{ | { | ||||
static void Main(string[] args) | static void Main(string[] args) | ||||
{ | { | ||||
NEAES128EncryptImpl nE_AES128EncryptImpl = new NEAES128EncryptImpl( | |||||
new GBNewEnergy.Protocol.NEGlobalConfigs() | |||||
{ | |||||
NEEncryptKey = "smallchi" | |||||
}); | |||||
Default_NEAES128EncryptImpl nE_AES128EncryptImpl = new Default_NEAES128EncryptImpl("smallchi"); | |||||
string str = "aaasssddd123"; | string str = "aaasssddd123"; | ||||
var bytes = Encoding.UTF8.GetBytes(str); | var bytes = Encoding.UTF8.GetBytes(str); | ||||
var encrypt = nE_AES128EncryptImpl.Encrypt(bytes); | var encrypt = nE_AES128EncryptImpl.Encrypt(bytes); | ||||
Console.WriteLine("原数据:" + str); | Console.WriteLine("原数据:" + str); | ||||
Console.WriteLine("加密后:" + encrypt.ToHexString()); | Console.WriteLine("加密后:" + encrypt.ToHexString()); | ||||
Console.WriteLine("解密后:" + Encoding.UTF8.GetString(nE_AES128EncryptImpl.Decrypt(encrypt))); | Console.WriteLine("解密后:" + Encoding.UTF8.GetString(nE_AES128EncryptImpl.Decrypt(encrypt))); | ||||
Default_NERSAEncryptImpl_NET rsa = new Default_NERSAEncryptImpl_NET(Encoding.UTF8, | |||||
"SHA256", | |||||
"<RSAKeyValue><Modulus>s+rl5mtcckCF9mEECD86L9UE2pbCR4CuiqDepwpiZCEflymQLNC3qNUPDlua9/kltyu6L489uimHRbEp4C7Gl7dDmaXVZLUVGkgUCZoRc8MrOw4+BiVAeQtCDdilPpA7DMN0bMfJAj3U4GuTU89/OWZMb9SYFfqEHM2e60PZHIU=</Modulus><Exponent>AQAB</Exponent><P>8qSTX42w2NaMCXL0PTZuacUFdJj93KopOJPD2q/JfmXSjXHV/IQK9YlCVKXHucqy8xcQgjkaKHqy3Rse14SZ7Q==</P><Q>vdJfDZ6ZIAQDx0sQbmbadHb6EOr8/oXo8B1CUSG0LqFZgDY7vBj17ujd6UhJWzhsg/5/3L+m4wDjMkUpOExZ+Q==</Q><DP>Av3Uc1Ej5QiAIX2xVS/enJ85Of7I4neWmoP33jJcoZpPxj6pDLv0BqLylmiU1c2R9z1JjtF1aRpaKi+zaaTQ4Q==</DP><DQ>Pv5yhv2MCYDrlBbIJCtD8gSN5lFllj3wWMcM/Am4VwU6w368Aicybo+fHUzc80XdVUx/OE3t30WrIEKtdD56WQ==</DQ><InverseQ>OcUQg0/kEGi9l2CgXCLKmQ1/1VVb+r89LXTO6rqi2wg5txkJIIXXePx7ce0Bh0eEnZzeSudwBLA3kqXmeAyYaw==</InverseQ><D>mnPL+zwtd7OmjTUJ5h6JUCi56wFDNWjl7gJeQd4rSzQYT4eRyrc/A4QsUbIYXkqXsyCpzExWvGsMQqrtfRQKzR53MBL3MQln5BjAUql2NqCkM2KT/D8Px5M21/TpMAycK4tGLOHgcCQRH1PQLHG1OfpfDASIzLwLgMjvMuHnIyE=</D></RSAKeyValue>", | |||||
"<RSAKeyValue><Modulus>s+rl5mtcckCF9mEECD86L9UE2pbCR4CuiqDepwpiZCEflymQLNC3qNUPDlua9/kltyu6L489uimHRbEp4C7Gl7dDmaXVZLUVGkgUCZoRc8MrOw4+BiVAeQtCDdilPpA7DMN0bMfJAj3U4GuTU89/OWZMb9SYFfqEHM2e60PZHIU=</Modulus><Exponent>AQAB</Exponent><P>8qSTX42w2NaMCXL0PTZuacUFdJj93KopOJPD2q/JfmXSjXHV/IQK9YlCVKXHucqy8xcQgjkaKHqy3Rse14SZ7Q==</P><Q>vdJfDZ6ZIAQDx0sQbmbadHb6EOr8/oXo8B1CUSG0LqFZgDY7vBj17ujd6UhJWzhsg/5/3L+m4wDjMkUpOExZ+Q==</Q><DP>Av3Uc1Ej5QiAIX2xVS/enJ85Of7I4neWmoP33jJcoZpPxj6pDLv0BqLylmiU1c2R9z1JjtF1aRpaKi+zaaTQ4Q==</DP><DQ>Pv5yhv2MCYDrlBbIJCtD8gSN5lFllj3wWMcM/Am4VwU6w368Aicybo+fHUzc80XdVUx/OE3t30WrIEKtdD56WQ==</DQ><InverseQ>OcUQg0/kEGi9l2CgXCLKmQ1/1VVb+r89LXTO6rqi2wg5txkJIIXXePx7ce0Bh0eEnZzeSudwBLA3kqXmeAyYaw==</InverseQ><D>mnPL+zwtd7OmjTUJ5h6JUCi56wFDNWjl7gJeQd4rSzQYT4eRyrc/A4QsUbIYXkqXsyCpzExWvGsMQqrtfRQKzR53MBL3MQln5BjAUql2NqCkM2KT/D8Px5M21/TpMAycK4tGLOHgcCQRH1PQLHG1OfpfDASIzLwLgMjvMuHnIyE=</D></RSAKeyValue>" | |||||
); | |||||
Console.WriteLine("原始字符串:" + str); | |||||
//加密 | |||||
byte[] enBytes = rsa.Encrypt(Encoding.UTF8.GetBytes(str)); | |||||
Console.WriteLine("加密字符串:" + enBytes.ToHexString()); | |||||
//解密 | |||||
byte[] deBytes = rsa.Decrypt(enBytes); | |||||
Console.WriteLine("解密字符串:" + Encoding.UTF8.GetString(deBytes)); | |||||
//私钥签名 | |||||
string signStr = rsa.Sign(str); | |||||
Console.WriteLine("字符串签名:" + signStr); | |||||
//公钥验证签名 | |||||
bool signVerify = rsa.Verify(str, signStr); | |||||
Console.WriteLine("验证签名:" + signVerify); | |||||
Console.ReadKey(); | Console.ReadKey(); | ||||
} | } | ||||
} | } | ||||
@@ -2,6 +2,7 @@ | |||||
using GBNewEnergy.Protocol.Extensions; | using GBNewEnergy.Protocol.Extensions; | ||||
using System; | using System; | ||||
using System.Text; | using System.Text; | ||||
using System.Security.Cryptography; | |||||
namespace NEEncryptsNETCore.Test | namespace NEEncryptsNETCore.Test | ||||
{ | { | ||||
@@ -9,17 +10,42 @@ namespace NEEncryptsNETCore.Test | |||||
{ | { | ||||
static void Main(string[] args) | static void Main(string[] args) | ||||
{ | { | ||||
NEAES128EncryptImpl nE_AES128EncryptImpl = new NEAES128EncryptImpl( | |||||
new GBNewEnergy.Protocol.NEGlobalConfigs() | |||||
{ | |||||
NEEncryptKey = "smallchi" | |||||
}); | |||||
string str ="aaaaaa111111"; | |||||
var bytes = Encoding.UTF8.GetBytes(str); | |||||
var encrypt = nE_AES128EncryptImpl.Encrypt(bytes); | |||||
Console.WriteLine("原数据:" + str); | |||||
Console.WriteLine("加密后:" + encrypt.ToHexString()); | |||||
Console.WriteLine("解密后:" + Encoding.ASCII.GetString(nE_AES128EncryptImpl.Decrypt(encrypt))); | |||||
//Default_NEAES128EncryptImpl nE_AES128EncryptImpl = new Default_NEAES128EncryptImpl("smallchi"); | |||||
string str = "aaaaaa111111"; | |||||
//var bytes = Encoding.UTF8.GetBytes(str); | |||||
//var encrypt = nE_AES128EncryptImpl.Encrypt(bytes); | |||||
//Console.WriteLine("原数据:" + str); | |||||
//Console.WriteLine("加密后:" + encrypt.ToHexString()); | |||||
//Console.WriteLine("解密后:" + Encoding.ASCII.GetString(nE_AES128EncryptImpl.Decrypt(encrypt))); | |||||
//NERSAEncryptImpl rsa = new NERSAEncryptImpl( | |||||
// new GBNewEnergy.Protocol.NEGlobalConfigs() | |||||
// { | |||||
// NEEncryptRSAPublicKey = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAoQh0wEqx/R2H1v00IU12Oc30fosRC/frhH89L6G+fzeaqI19MYQhEPMU13wpeqRONCUta+2iC1sgCNQ9qGGf19yGdZUfueaB1Nu9rdueQKXgVurGHJ+5N71UFm+OP1XcnFUCK4wT5d7ZIifXxuqLehP9Ts6sNjhVfa+yU+VjF5HoIe69OJEPo7OxRZcRTe17khc93Ic+PfyqswQJJlY/bgpcLJQnM+QuHmxNtF7/FpAx9YEQsShsGpVo7JaKgLo+s6AFoJ4QldQKir2vbN9vcKRbG3piElPilWDpjXQkOJZhUloh/jd7QrKFimZFldJ1r6Q59QYUyGKZARUe0KZpMQIDAQAB", | |||||
// NEEncryptRSAPrivateKey = "MIIEpAIBAAKCAQEAoQh0wEqx/R2H1v00IU12Oc30fosRC/frhH89L6G+fzeaqI19MYQhEPMU13wpeqRONCUta+2iC1sgCNQ9qGGf19yGdZUfueaB1Nu9rdueQKXgVurGHJ+5N71UFm+OP1XcnFUCK4wT5d7ZIifXxuqLehP9Ts6sNjhVfa+yU+VjF5HoIe69OJEPo7OxRZcRTe17khc93Ic+PfyqswQJJlY/bgpcLJQnM+QuHmxNtF7/FpAx9YEQsShsGpVo7JaKgLo+s6AFoJ4QldQKir2vbN9vcKRbG3piElPilWDpjXQkOJZhUloh/jd7QrKFimZFldJ1r6Q59QYUyGKZARUe0KZpMQIDAQABAoIBAQCRZLUlOUvjIVqYvhznRK1OG6p45s8JY1r+UnPIId2Bt46oSLeUkZvZVeCnfq9k0Bzb8AVGwVPhtPEDh73z3dEYcT/lwjLXAkyPB6gG5ZfI/vvC/k7JYV01+neFmktw2/FIJWjEMMF2dvLNZ/Pm4bX1Dz9SfD/45Hwr8wqrvRzvFZsj5qqOxv9RPAudOYwCwZskKp/GF+L+3Ycod1Wu98imzMZUH+L5dQuDGg3kvf3ljIAegTPoqYBg0imNPYY/EGoFKnbxlK5S5/5uAFb16dGJqAz3XQCz9Is/IWrOTu0etteqV2Ncs8uqPdjed+b0j8CMsr4U1xjwPQ8WwdaJtTkRAoGBANAndgiGZkCVcc9975/AYdgFp35W6D+hGQAZlL6DmnucUFdXbWa/x2rTSEXlkvgk9X/PxOptUYsLJkzysTgfDywZwuIXLm9B3oNmv3bVgPXsgDsvDfaHYCgz0nHK6NSrX2AeX3yO/dFuoZsuk+J+UyRigMqYj0wjmxUlqj183hinAoGBAMYMOBgF77OXRII7GAuEut/nBeh2sBrgyzR7FmJMs5kvRh6Ck8wp3ysgMvX4lxh1ep8iCw1R2cguqNATr1klOdsCTOE9RrhuvOp3JrYzuIAK6MpH/uBICy4w1rW2+gQySsHcH40r+tNaTFQ7dQ1tef//iy/IW8v8i0t+csztE1JnAoGABdtWYt8FOYP688+jUmdjWWSvVcq0NjYeMfaGTOX/DsNTL2HyXhW/Uq4nNnBDNmAz2CjMbZwt0y+5ICkj+2REVQVUinAEinTcAe5+LKXNPx4sbX3hcrJUbk0m+rSu4G0B/f5cyXBsi9wFCAzDdHgBduCepxSr04Sc9Hde1uQQi7kCgYB0U20HP0Vh+TG2RLuE2HtjVDD2L/CUeQEiXEHzjxXWnhvTg+MIAnggvpLwQwmMxkQ2ACr5sd/3YuCpB0bxV5o594nsqq9FWVYBaecFEjAGlWHSnqMoXWijwu/6X/VOTbP3VjH6G6ECT4GR4DKKpokIQrMgZ9DzaezvdOA9WesFdQKBgQCWfeOQTitRJ0NZACFUn3Fs3Rvgc9eN9YSWj4RtqkmGPMPvguWo+SKhlk3IbYjrRBc5WVOdoX8JXb2/+nAGhPCuUZckWVmZe5pMSr4EkNQdYeY8kOXGSjoTOUH34ZdKeS+e399BkBWIiXUejX/Srln0H4KoHnTWgxwNpTsBCgXu8Q==", | |||||
// NERSAType = GBNewEnergy.Protocol.NEGlobalConfigs.RSAType.RSA2 | |||||
// }); | |||||
Default_NERSAEncryptImpl rsa = new Default_NERSAEncryptImpl( | |||||
Encoding.UTF8, | |||||
HashAlgorithmName.SHA256, | |||||
"<RSAKeyValue><Modulus>s+rl5mtcckCF9mEECD86L9UE2pbCR4CuiqDepwpiZCEflymQLNC3qNUPDlua9/kltyu6L489uimHRbEp4C7Gl7dDmaXVZLUVGkgUCZoRc8MrOw4+BiVAeQtCDdilPpA7DMN0bMfJAj3U4GuTU89/OWZMb9SYFfqEHM2e60PZHIU=</Modulus><Exponent>AQAB</Exponent><P>8qSTX42w2NaMCXL0PTZuacUFdJj93KopOJPD2q/JfmXSjXHV/IQK9YlCVKXHucqy8xcQgjkaKHqy3Rse14SZ7Q==</P><Q>vdJfDZ6ZIAQDx0sQbmbadHb6EOr8/oXo8B1CUSG0LqFZgDY7vBj17ujd6UhJWzhsg/5/3L+m4wDjMkUpOExZ+Q==</Q><DP>Av3Uc1Ej5QiAIX2xVS/enJ85Of7I4neWmoP33jJcoZpPxj6pDLv0BqLylmiU1c2R9z1JjtF1aRpaKi+zaaTQ4Q==</DP><DQ>Pv5yhv2MCYDrlBbIJCtD8gSN5lFllj3wWMcM/Am4VwU6w368Aicybo+fHUzc80XdVUx/OE3t30WrIEKtdD56WQ==</DQ><InverseQ>OcUQg0/kEGi9l2CgXCLKmQ1/1VVb+r89LXTO6rqi2wg5txkJIIXXePx7ce0Bh0eEnZzeSudwBLA3kqXmeAyYaw==</InverseQ><D>mnPL+zwtd7OmjTUJ5h6JUCi56wFDNWjl7gJeQd4rSzQYT4eRyrc/A4QsUbIYXkqXsyCpzExWvGsMQqrtfRQKzR53MBL3MQln5BjAUql2NqCkM2KT/D8Px5M21/TpMAycK4tGLOHgcCQRH1PQLHG1OfpfDASIzLwLgMjvMuHnIyE=</D></RSAKeyValue>", | |||||
"<RSAKeyValue><Modulus>s+rl5mtcckCF9mEECD86L9UE2pbCR4CuiqDepwpiZCEflymQLNC3qNUPDlua9/kltyu6L489uimHRbEp4C7Gl7dDmaXVZLUVGkgUCZoRc8MrOw4+BiVAeQtCDdilPpA7DMN0bMfJAj3U4GuTU89/OWZMb9SYFfqEHM2e60PZHIU=</Modulus><Exponent>AQAB</Exponent><P>8qSTX42w2NaMCXL0PTZuacUFdJj93KopOJPD2q/JfmXSjXHV/IQK9YlCVKXHucqy8xcQgjkaKHqy3Rse14SZ7Q==</P><Q>vdJfDZ6ZIAQDx0sQbmbadHb6EOr8/oXo8B1CUSG0LqFZgDY7vBj17ujd6UhJWzhsg/5/3L+m4wDjMkUpOExZ+Q==</Q><DP>Av3Uc1Ej5QiAIX2xVS/enJ85Of7I4neWmoP33jJcoZpPxj6pDLv0BqLylmiU1c2R9z1JjtF1aRpaKi+zaaTQ4Q==</DP><DQ>Pv5yhv2MCYDrlBbIJCtD8gSN5lFllj3wWMcM/Am4VwU6w368Aicybo+fHUzc80XdVUx/OE3t30WrIEKtdD56WQ==</DQ><InverseQ>OcUQg0/kEGi9l2CgXCLKmQ1/1VVb+r89LXTO6rqi2wg5txkJIIXXePx7ce0Bh0eEnZzeSudwBLA3kqXmeAyYaw==</InverseQ><D>mnPL+zwtd7OmjTUJ5h6JUCi56wFDNWjl7gJeQd4rSzQYT4eRyrc/A4QsUbIYXkqXsyCpzExWvGsMQqrtfRQKzR53MBL3MQln5BjAUql2NqCkM2KT/D8Px5M21/TpMAycK4tGLOHgcCQRH1PQLHG1OfpfDASIzLwLgMjvMuHnIyE=</D></RSAKeyValue>" | |||||
); | |||||
Console.WriteLine("原始字符串:" + str); | |||||
//加密 | |||||
byte[] enBytes = rsa.Encrypt(Encoding.UTF8.GetBytes(str)); | |||||
Console.WriteLine("加密字符串:" + enBytes.ToHexString()); | |||||
//解密 | |||||
byte[] deBytes = rsa.Decrypt(enBytes); | |||||
Console.WriteLine("解密字符串:" + Encoding.UTF8.GetString(deBytes)); | |||||
//私钥签名 | |||||
string signStr = rsa.Sign(str); | |||||
Console.WriteLine("字符串签名:" + signStr); | |||||
//公钥验证签名 | |||||
bool signVerify = rsa.Verify(str, signStr); | |||||
Console.WriteLine("验证签名:" + signVerify); | |||||
Console.ReadKey(); | Console.ReadKey(); | ||||
} | } | ||||
} | } | ||||