Web数据RAS加密 JS前端 C#后端

编程入门 行业动态 更新时间:2024-10-20 18:49:33

Web数据RAS加密 JS前端 C#<a href=https://www.elefans.com/category/jswz/34/1771414.html style=后端"/>

Web数据RAS加密 JS前端 C#后端

Web数据RAS加密 JS前端 C#后端

  • RAS秘钥生成
  • 前端
  • 后端
  • 参考

RAS秘钥生成

OpenSSL或访问如下网站:

秘钥位数秘钥格式
1024PKCS#1

公钥

-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDMDeMbH0ZCksv5bEJoeWbuFrGF
Sw7YJH1lbST/nmpJyKjX+VYX7KhfEHdXdlqduvNS2slxMRRnh80y0w0rkG8zo8ox
CejODohBB9IBI7MbT2Ci+4fhS4h/ANjBXeV7Fos2dI+JahCh+jW3irRE29kaTzx9
xDRXdMSAbvb6+vsd5QIDAQAB
-----END PUBLIC KEY-----

私钥

-----BEGIN RSA PRIVATE KEY-----
MIICXQIBAAKBgQDMDeMbH0ZCksv5bEJoeWbuFrGFSw7YJH1lbST/nmpJyKjX+VYX
7KhfEHdXdlqduvNS2slxMRRnh80y0w0rkG8zo8oxCejODohBB9IBI7MbT2Ci+4fh
S4h/ANjBXeV7Fos2dI+JahCh+jW3irRE29kaTzx9xDRXdMSAbvb6+vsd5QIDAQAB
AoGAHpAV7AILK/2Av6MPb0Z/vDl57VUIrCcLAR4P5Jl9of+ECpU15+9yaIq21UrM
18MgntBWS7XmMHuOqIYj+tpvTTBFgnM7GsdT9cwEsjNOLAHhcbtP/NgDsMjxv1/m
qt5/OVHXPBk4iM7AXnYxqk14R0+uRFoSzRBDbY6NIiXjbwECQQDei/J6buwmnja9
0jXq/mO0ZPLJrB2RQQ7W/StW7IgnJLnn1Nfsp1LZaU47alDXNkzeqpJKrm8NN0M2
2XisPcP5AkEA6rpQRoQoXMjxC1etYtdeg+QEkcmb4KeZj9Dv6FqFDm7WPJjyksfF
BxruquDJRQm+1ggc6cr9ZalA7E8ll9OMTQJAOXPZon/2WTXpHfIh10vbQ5v4DdZw
P6qTAS+Uu7kOoURa9h29rKu5uMT13GLjAdxT1fwlDkCgDMJiiMt12smLSQJBAJmt
D3+LaM2OdVnitk6/CE87Ss6T+yzzLbOdrGQoV3KimDqmPDJi/hjvxhA0CTHc9oc0
WpGqZ4pWbH4KN2eWhgUCQQCN98J7BAJqag0GIkiEm48rUTVm3Fa+agiM6Ev0eqTs
0iAJwa4pDzIBCQMbRHiN9q6cWBnQ2u1hnffuDKIBsRMb
-----END RSA PRIVATE KEY-----

前端

用jsencrypt.js进行加密,下载地址:
/

<html>
<header>
<title>JsencryptTest</title>
</header>
<script type="text/javascript" src="jquery-3.4.1.min.js"></script>
<script type="text/javascript" src="jsencrypt.min.js"></script>
<body>
<script>
$(document).ready(function(){let result = cmdRSAEncrypt("hello");//对hello进行加密console.log(result);
});function cmdRSAEncrypt(str){var encrypt = new JSEncrypt();var public_key = "-----BEGIN PUBLIC KEY----- \MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDMDeMbH0ZCksv5bEJoeWbuFrGF \Sw7YJH1lbST/nmpJyKjX+VYX7KhfEHdXdlqduvNS2slxMRRnh80y0w0rkG8zo8ox \CejODohBB9IBI7MbT2Ci+4fhS4h/ANjBXeV7Fos2dI+JahCh+jW3irRE29kaTzx9 \xDRXdMSAbvb6+vsd5QIDAQAB \-----END PUBLIC KEY-----";encrypt.setPublicKey(public_key);return encrypt.encrypt(str);//通过公钥加密
}
</script>
</body>
</html>

hello加密后

SmDDpkJw9qSpCKGC1wkeXq2mc66VaCFNDP7F0ZcZYLmn6AHC3bfkoprHx+lec6rstIlawicyjbnNuIgabKKTF/gztQ7W9LJlF4mCyGHYYIRPzCZnZbQBr0TIH95ybOavKMoJ+QWuUTgghipD34SKSu+bkuqQKpDkALFTJM3DW1o=

后端

C#解密

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Security.Cryptography;namespace RSATest
{class Program{static void Main(string[] args){//生成秘钥位数1024//秘钥格式 PKCS#1//证书密码 空//网站  public_Key = @"MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDMDeMbH0ZCksv5bEJoeWbuFrGF
Sw7YJH1lbST/nmpJyKjX+VYX7KhfEHdXdlqduvNS2slxMRRnh80y0w0rkG8zo8ox
CejODohBB9IBI7MbT2Ci+4fhS4h/ANjBXeV7Fos2dI+JahCh+jW3irRE29kaTzx9
xDRXdMSAbvb6+vsd5QIDAQAB";string private_key = @"MIICXQIBAAKBgQDMDeMbH0ZCksv5bEJoeWbuFrGFSw7YJH1lbST/nmpJyKjX+VYX
7KhfEHdXdlqduvNS2slxMRRnh80y0w0rkG8zo8oxCejODohBB9IBI7MbT2Ci+4fh
S4h/ANjBXeV7Fos2dI+JahCh+jW3irRE29kaTzx9xDRXdMSAbvb6+vsd5QIDAQAB
AoGAHpAV7AILK/2Av6MPb0Z/vDl57VUIrCcLAR4P5Jl9of+ECpU15+9yaIq21UrM
18MgntBWS7XmMHuOqIYj+tpvTTBFgnM7GsdT9cwEsjNOLAHhcbtP/NgDsMjxv1/m
qt5/OVHXPBk4iM7AXnYxqk14R0+uRFoSzRBDbY6NIiXjbwECQQDei/J6buwmnja9
0jXq/mO0ZPLJrB2RQQ7W/StW7IgnJLnn1Nfsp1LZaU47alDXNkzeqpJKrm8NN0M2
2XisPcP5AkEA6rpQRoQoXMjxC1etYtdeg+QEkcmb4KeZj9Dv6FqFDm7WPJjyksfF
BxruquDJRQm+1ggc6cr9ZalA7E8ll9OMTQJAOXPZon/2WTXpHfIh10vbQ5v4DdZw
P6qTAS+Uu7kOoURa9h29rKu5uMT13GLjAdxT1fwlDkCgDMJiiMt12smLSQJBAJmt
D3+LaM2OdVnitk6/CE87Ss6T+yzzLbOdrGQoV3KimDqmPDJi/hjvxhA0CTHc9oc0
WpGqZ4pWbH4KN2eWhgUCQQCN98J7BAJqag0GIkiEm48rUTVm3Fa+agiM6Ev0eqTs
0iAJwa4pDzIBCQMbRHiN9q6cWBnQ2u1hnffuDKIBsRMb";RSACryptoService rsa = new RSACryptoService(private_key, public_Key);string result = rsa.Decrypt("SmDDpkJw9qSpCKGC1wkeXq2mc66VaCFNDP7F0ZcZYLmn6AHC3bfkoprHx+lec6rstIlawicyjbnNuIgabKKTF/gztQ7W9LJlF4mCyGHYYIRPzCZnZbQBr0TIH95ybOavKMoJ+QWuUTgghipD34SKSu+bkuqQKpDkALFTJM3DW1o=");Console.WriteLine(result);}}public class RSACryptoService{private RSACryptoServiceProvider _privateKeyRsaProvider;private RSACryptoServiceProvider _publicKeyRsaProvider;/// <summary>/// RSA解密/// </summary>/// <param name="cipherText"></param>/// <returns></returns>public string Decrypt(string cipherText){if (_privateKeyRsaProvider == null){throw new Exception("_privateKeyRsaProvider is null");}return Decrypt2(cipherText);}/// <summary>/// RSA加密/// </summary>/// <param name="text"></param>/// <returns></returns>public string Encrypt(string text){if (_publicKeyRsaProvider == null){throw new Exception("_publicKeyRsaProvider is null");}return Encrypt2(text);//return Convert.ToBase64String(_publicKeyRsaProvider.Encrypt(Encoding.UTF8.GetBytes(text), false));}private string Encrypt2(string text){Byte[] PlaintextData = Encoding.UTF8.GetBytes(text);int MaxBlockSize = _publicKeyRsaProvider.KeySize / 8 - 11;//加密块最大长度限制if (PlaintextData.Length <= MaxBlockSize){return Convert.ToBase64String(_publicKeyRsaProvider.Encrypt(PlaintextData, false));}else{using (MemoryStream PlaiStream = new MemoryStream(PlaintextData))using (MemoryStream CrypStream = new MemoryStream()){Byte[] Buffer = new Byte[MaxBlockSize];int BlockSize = PlaiStream.Read(Buffer, 0, MaxBlockSize);while (BlockSize > 0){Byte[] ToEncrypt = new Byte[BlockSize];Array.Copy(Buffer, 0, ToEncrypt, 0, BlockSize);Byte[] Cryptograph = _publicKeyRsaProvider.Encrypt(ToEncrypt, false);CrypStream.Write(Cryptograph, 0, Cryptograph.Length);BlockSize = PlaiStream.Read(Buffer, 0, MaxBlockSize);}return Convert.ToBase64String(CrypStream.ToArray(), Base64FormattingOptions.None);}}}private string Decrypt2(string ciphertext){Byte[] CiphertextData = Convert.FromBase64String(ciphertext);int MaxBlockSize = _privateKeyRsaProvider.KeySize / 8;    //解密块最大长度限制if (CiphertextData.Length <= MaxBlockSize)return System.Text.Encoding.UTF8.GetString(_privateKeyRsaProvider.Decrypt(CiphertextData, false));using (MemoryStream CrypStream = new MemoryStream(CiphertextData))using (MemoryStream PlaiStream = new MemoryStream()){Byte[] Buffer = new Byte[MaxBlockSize];int BlockSize = CrypStream.Read(Buffer, 0, MaxBlockSize);while (BlockSize > 0){Byte[] ToDecrypt = new Byte[BlockSize];Array.Copy(Buffer, 0, ToDecrypt, 0, BlockSize);Byte[] Plaintext = _privateKeyRsaProvider.Decrypt(ToDecrypt, false);PlaiStream.Write(Plaintext, 0, Plaintext.Length);BlockSize = CrypStream.Read(Buffer, 0, MaxBlockSize);}return System.Text.Encoding.UTF8.GetString(PlaiStream.ToArray());}}public RSACryptoService(string privateKey, string publicKey){if (!string.IsNullOrEmpty(privateKey)){_privateKeyRsaProvider = CreateRsaProviderFromPrivateKey(privateKey);}if (!string.IsNullOrEmpty(publicKey)){_publicKeyRsaProvider = CreateRsaProviderFromPublicKey(publicKey);}}private RSACryptoServiceProvider CreateRsaProviderFromPrivateKey(string privateKey){var privateKeyBits = System.Convert.FromBase64String(privateKey);var RSA = new RSACryptoServiceProvider();var RSAparams = new RSAParameters();using (BinaryReader binr = new BinaryReader(new MemoryStream(privateKeyBits))){byte bt = 0;ushort twobytes = 0;twobytes = binr.ReadUInt16();if (twobytes == 0x8130)binr.ReadByte();else if (twobytes == 0x8230)binr.ReadInt16();elsethrow new Exception("Unexpected value read binr.ReadUInt16()");twobytes = binr.ReadUInt16();if (twobytes != 0x0102)throw new Exception("Unexpected version");bt = binr.ReadByte();if (bt != 0x00)throw new Exception("Unexpected value read binr.ReadByte()");RSAparams.Modulus = binr.ReadBytes(GetIntegerSize(binr));RSAparams.Exponent = binr.ReadBytes(GetIntegerSize(binr));RSAparams.D = binr.ReadBytes(GetIntegerSize(binr));RSAparams.P = binr.ReadBytes(GetIntegerSize(binr));RSAparams.Q = binr.ReadBytes(GetIntegerSize(binr));RSAparams.DP = binr.ReadBytes(GetIntegerSize(binr));RSAparams.DQ = binr.ReadBytes(GetIntegerSize(binr));RSAparams.InverseQ = binr.ReadBytes(GetIntegerSize(binr));}RSA.ImportParameters(RSAparams);return RSA;}private int GetIntegerSize(BinaryReader binr){byte bt = 0;byte lowbyte = 0x00;byte highbyte = 0x00;int count = 0;bt = binr.ReadByte();if (bt != 0x02)return 0;bt = binr.ReadByte();if (bt == 0x81)count = binr.ReadByte();elseif (bt == 0x82){highbyte = binr.ReadByte();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 RSACryptoServiceProvider CreateRsaProviderFromPublicKey(string publicKeyString){// encoded OID sequence for  PKCS #1 rsaEncryption szOID_RSA_RSA = "1.2.840.113549.1.1.1"byte[] SeqOID = { 0x30, 0x0D, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x01, 0x05, 0x00 };byte[] x509key;byte[] seq = new byte[15];int x509size;x509key = Convert.FromBase64String(publicKeyString);x509size = x509key.Length;// ---------  Set up stream to read the asn.1 encoded SubjectPublicKeyInfo blob  ------using (MemoryStream mem = new MemoryStream(x509key)){using (BinaryReader binr = new BinaryReader(mem))  //wrap Memory Stream with BinaryReader for easy reading{byte bt = 0;ushort twobytes = 0;twobytes = binr.ReadUInt16();if (twobytes == 0x8130) //data read as little endian order (actual data order for Sequence is 30 81)binr.ReadByte();    //advance 1 byteelse if (twobytes == 0x8230)binr.ReadInt16();   //advance 2 byteselsereturn null;seq = binr.ReadBytes(15);       //read the Sequence OIDif (!CompareBytearrays(seq, SeqOID))    //make sure Sequence for OID is correctreturn null;twobytes = binr.ReadUInt16();if (twobytes == 0x8103) //data read as little endian order (actual data order for Bit String is 03 81)binr.ReadByte();    //advance 1 byteelse if (twobytes == 0x8203)binr.ReadInt16();   //advance 2 byteselsereturn null;bt = binr.ReadByte();if (bt != 0x00)     //expect null byte nextreturn null;twobytes = binr.ReadUInt16();if (twobytes == 0x8130) //data read as little endian order (actual data order for Sequence is 30 81)binr.ReadByte();    //advance 1 byteelse if (twobytes == 0x8230)binr.ReadInt16();   //advance 2 byteselsereturn null;twobytes = binr.ReadUInt16();byte lowbyte = 0x00;byte highbyte = 0x00;if (twobytes == 0x8102) //data read as little endian order (actual data order for Integer is 02 81)lowbyte = binr.ReadByte();  // read next bytes which is bytes in moduluselse if (twobytes == 0x8202){highbyte = binr.ReadByte(); //advance 2 byteslowbyte = binr.ReadByte();}elsereturn null;byte[] modint = { lowbyte, highbyte, 0x00, 0x00 };   //reverse byte order since asn.1 key uses big endian orderint modsize = BitConverter.ToInt32(modint, 0);int firstbyte = binr.PeekChar();if (firstbyte == 0x00){   //if first byte (highest order) of modulus is zero, don't include itbinr.ReadByte();    //skip this null bytemodsize -= 1;   //reduce modulus buffer size by 1}byte[] modulus = binr.ReadBytes(modsize);   //read the modulus bytesif (binr.ReadByte() != 0x02)            //expect an Integer for the exponent datareturn null;int expbytes = (int)binr.ReadByte();        // should only need one byte for actual exponent data (for all useful values)byte[] exponent = binr.ReadBytes(expbytes);// ------- create RSACryptoServiceProvider instance and initialize with public key -----RSACryptoServiceProvider RSA = new RSACryptoServiceProvider();RSAParameters RSAKeyInfo = new RSAParameters();RSAKeyInfo.Modulus = modulus;RSAKeyInfo.Exponent = exponent;RSA.ImportParameters(RSAKeyInfo);return RSA;}}}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;}}
}

参考

.html

更多推荐

Web数据RAS加密 JS前端 C#后端

本文发布于:2024-02-26 19:08:33,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1703561.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:后端   数据   Web   JS   RAS

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!