在路上

 

2021年4月4日

C#RSA加密解密详解

    //需要添加BouncyCastle引用
    public class RSAEncryptAndDecrypt
    {
        public static bool Login()
        {
            try
            {
                string userpwd = "a123456";
                string publickey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCicdRcD669oTrlnnqQL6GD8pbnMjgOW2zUAA2qvRn+IQ7QtkPtCYzbdxSEomg8M49zMYZLb3547IPTAmBJw3PDgHiSFgHSWDq851N8eQgi6vWuDI+X+/1nxJ84rlM2c0GGOU761GQDll1vUxuFEORpJg6/MCyluBOEfkvLcMN5YwIDAQAB";
                string privatekey = "MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAKJx1FwPrr2hOuWeepAvoYPylucyOA5bbNQADaq9Gf4hDtC2Q+0JjNt3FISiaDwzj3Mxhktvfnjsg9MCYEnDc8OAeJIWAdJYOrznU3x5CCLq9a4Mj5f7/WfEnziuUzZzQYY5TvrUZAOWXW9TG4UQ5GkmDr8wLKW4E4R+S8tww3ljAgMBAAECgYEAhuB6kWHYFc1cCLF4VGWn9tWipB4XWxxgFPpiXqSag13RXkwnxBWM5eBOof3zDCFHdz7koZfWa/L9VWOArV5iq9J86okA7KEPygO9Jkk582JKKDD7TQsxxPvnaYAonGPXmrVBg3RGHxsVGXj9KLuLsDUdzHOUADyZbPyBHkeuB/kCQQD//498ZgeWy/x8Bqc2hS5vs1hvksAWNkEexmO253J8BZdffcM5MCsFu3/lWvFcBKaoNdv10IrNr97evICBW3v9AkEAonIbwX3rbJ8AYojjD7EGLdLlCCfirs94+F963JEQyOh4mNiMXqlFRw58ey5NpuZDO8VzRqCRL5+eRml82NnY3wJANIq0XXjnd9jYMnB/I16EYGKz9PpuuGBcTz+yuZiZU8EmB3BdgEBVpDCOmHlo7lT6C646PiKWSo8dNCQGUAaB1QJAE79pbmE/YGoH4vKfH8Y2aRWtMAuhO/0OyKraxbuA3duc5X/VuKA9QsEZEuRzHin53GdJdzmHzNFLrWWffsEk4wJBAPcsbafg740NKy7duPHtZJCA9/WI1nWHrkLR1DZqrl7eSXXCN5XQvpB4Q+38WgvLogmQ2+4AqrT5/VAaesPd8YU=";
                string publickey2xml = RSAPublicKey2xml(publickey);                 //公钥转换成xml格式
                string xml2publickey = RSAxml2PublicKey(publickey2xml);             //xml格式转换为公钥
                string password = Encrypt(userpwd, publickey2xml);                  //公钥加密
                string privatekey2xml = RSAPrivateKey2xml(privatekey);              //公钥转换成xml格式
                string xml2privatekey = RSAxml2PrivateKey(privatekey2xml);          //xml格式转换成公钥
                string upwd = Decrypt(password, privatekey2xml);                    //私钥解密
                return userpwd == upwd;
            }
            catch (Exception ex)
            {
                return false;
            }
        }

        static string RSAPublicKey2xml(string publicKey)
        {
            RsaKeyParameters publicKeyParam = (RsaKeyParameters)PublicKeyFactory.CreateKey(Convert.FromBase64String(publicKey));
            return string.Format("<RSAKeyValue><Modulus>{0}</Modulus><Exponent>{1}</Exponent></RSAKeyValue>",
                Convert.ToBase64String(publicKeyParam.Modulus.ToByteArrayUnsigned()),
                Convert.ToBase64String(publicKeyParam.Exponent.ToByteArrayUnsigned()));
        }

        static string RSAxml2PublicKey(string publickey2xml)
        {
            XmlDocument doc = new XmlDocument();
            doc.LoadXml(publickey2xml);
            BigInteger m = new BigInteger(1, Convert.FromBase64String(doc.DocumentElement.GetElementsByTagName("Modulus")[0].InnerText));
            BigInteger p = new BigInteger(1, Convert.FromBase64String(doc.DocumentElement.GetElementsByTagName("Exponent")[0].InnerText));
            RsaKeyParameters pub = new RsaKeyParameters(false, m, p);
            SubjectPublicKeyInfo publicKeyInfo = SubjectPublicKeyInfoFactory.CreateSubjectPublicKeyInfo(pub);
            byte[] serializedPublicBytes = publicKeyInfo.ToAsn1Object().GetDerEncoded();
            return Convert.ToBase64String(serializedPublicBytes);
        }

        static string Encrypt(string content, string key)
        {
            RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
            byte[] cipherbytes;
            rsa.FromXmlString(key);
            cipherbytes = rsa.Encrypt(Encoding.UTF8.GetBytes(content), false);
            return Convert.ToBase64String(cipherbytes);
        }

        static string RSAPrivateKey2xml(string privateKey)
        {
            RsaPrivateCrtKeyParameters privateKeyParam = (RsaPrivateCrtKeyParameters)PrivateKeyFactory.CreateKey(Convert.FromBase64String(privateKey));
            return string.Format("<RSAKeyValue><Modulus>{0}</Modulus><Exponent>{1}</Exponent><P>{2}</P><Q>{3}</Q><DP>{4}</DP><DQ>{5}</DQ><InverseQ>{6}</InverseQ><D>{7}</D></RSAKeyValue>",
                Convert.ToBase64String(privateKeyParam.Modulus.ToByteArrayUnsigned()),
                Convert.ToBase64String(privateKeyParam.PublicExponent.ToByteArrayUnsigned()),
                Convert.ToBase64String(privateKeyParam.P.ToByteArrayUnsigned()),
                Convert.ToBase64String(privateKeyParam.Q.ToByteArrayUnsigned()),
                Convert.ToBase64String(privateKeyParam.DP.ToByteArrayUnsigned()),
                Convert.ToBase64String(privateKeyParam.DQ.ToByteArrayUnsigned()),
                Convert.ToBase64String(privateKeyParam.QInv.ToByteArrayUnsigned()),
                Convert.ToBase64String(privateKeyParam.Exponent.ToByteArrayUnsigned()));
        }

        static string RSAxml2PrivateKey(string privatekey2xml)
        {
            XmlDocument doc = new XmlDocument();
            doc.LoadXml(privatekey2xml);
            BigInteger m = new BigInteger(1, Convert.FromBase64String(doc.DocumentElement.GetElementsByTagName("Modulus")[0].InnerText));
            BigInteger exp = new BigInteger(1, Convert.FromBase64String(doc.DocumentElement.GetElementsByTagName("Exponent")[0].InnerText));
            BigInteger d = new BigInteger(1, Convert.FromBase64String(doc.DocumentElement.GetElementsByTagName("D")[0].InnerText));
            BigInteger p = new BigInteger(1, Convert.FromBase64String(doc.DocumentElement.GetElementsByTagName("P")[0].InnerText));
            BigInteger q = new BigInteger(1, Convert.FromBase64String(doc.DocumentElement.GetElementsByTagName("Q")[0].InnerText));
            BigInteger dp = new BigInteger(1, Convert.FromBase64String(doc.DocumentElement.GetElementsByTagName("DP")[0].InnerText));
            BigInteger dq = new BigInteger(1, Convert.FromBase64String(doc.DocumentElement.GetElementsByTagName("DQ")[0].InnerText));
            BigInteger qinv = new BigInteger(1, Convert.FromBase64String(doc.DocumentElement.GetElementsByTagName("InverseQ")[0].InnerText));
            RsaPrivateCrtKeyParameters privateKeyParam = new RsaPrivateCrtKeyParameters(m, exp, d, p, q, dp, dq, qinv);
            PrivateKeyInfo privateKeyInfo = PrivateKeyInfoFactory.CreatePrivateKeyInfo(privateKeyParam);
            byte[] serializedPrivateBytes = privateKeyInfo.ToAsn1Object().GetEncoded();
            return Convert.ToBase64String(serializedPrivateBytes);
        }

        static string Decrypt(string content, string key)
        {
            RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
            byte[] cipherbytes;
            rsa.FromXmlString(key);
            cipherbytes = rsa.Decrypt(Convert.FromBase64String(content), false);
            return Encoding.UTF8.GetString(cipherbytes);
        }

    }

 

posted @ 2021-04-04 09:46 hsliuyl 阅读(608) 评论(0) 推荐(0) 编辑

2020年5月15日

电子印章制作管理系统 -升级版本

摘要: 哈哈,升级版本终于抽时间搞完了,更新了绘制的核心方法,可生成高质量的瘦高字体,非常漂亮美观 欢迎下载试用,欢迎提出意见,欢迎打赏 链接:https://pan.baidu.com/s/1r_zGpYdtiJRHpvo2ZPYSGg 提取码:p6sn 阅读全文

posted @ 2020-05-15 13:08 hsliuyl 阅读(247) 评论(0) 推荐(0) 编辑

2020年1月12日

有点分不出来那个更像是作者的原创了,你可以分辨吗?

摘要: 阅读全文

posted @ 2020-01-12 16:11 hsliuyl 阅读(149) 评论(0) 推荐(0) 编辑

2019年12月26日

tensorflow 实现的第一个目标检测模型

摘要: 很多时候我们觉得神经网络,AI等等高大上的技术遥不可及,其实它就在我们身边,或者我们的家人已经从事了相应的行业,打破我们自己对于它的恐惧心里,相信每一个有毅力的人都能入门,乃至成就一番事业, 毕竟我一个高中文凭的人都可以搞出来一点名堂,会写这些简单的模型,并且可以达到一定的目标 训练环境:笔记本电脑 阅读全文

posted @ 2019-12-26 13:01 hsliuyl 阅读(267) 评论(0) 推荐(0) 编辑

2019年11月2日

梯度下降法的优化与人生的思考

摘要: 我是一个地地道道的技术人员,今天不跟大家讲复杂的数学原理,其实从图像就可以看出来一些蛛丝马迹,X是呱呱坠地的我们,W是指引我们前进的方向,B是我们生活的压力值,Func会根据W和B显示我们的轨迹,然而轨迹的平缓程度与好多复杂的因素有关,Y是我们的终点 很明显X,Y我们没办法控制,W和B的初始值也是随 阅读全文

posted @ 2019-11-02 11:13 hsliuyl 阅读(205) 评论(0) 推荐(0) 编辑

2019年9月28日

神经网络 backpropagation 反向传播原理精讲学习笔记

摘要: 大家好,我是一个对机器学习,神经网络,深度学习非常感兴趣的新人,也没有多少基础,从零开始学习,很希望能和大家一起学习,一起交流经验,互相鼓励,互相进步,传递正能量,使得学习的道路上我们并不孤单,虽然我们一直从事着一个比较枯燥的行业,但是我们依然需要鼓足勇气一直往前走,话不多说了,请大家对我的学习笔记 阅读全文

posted @ 2019-09-28 11:37 hsliuyl 阅读(142) 评论(0) 推荐(0) 编辑

2019年9月23日

梯度下降法(gradient descent)动态演示原理

摘要: 各种视频教程请加qq群 214440292 一起学习一起交流,分享经验 阅读全文

posted @ 2019-09-23 16:36 hsliuyl 阅读(747) 评论(0) 推荐(0) 编辑

2019年9月18日

Kmeans均值分类动态演示

摘要: 各种视频教程请加qq群 214440292 一起学习一起交流,分享经验 阅读全文

posted @ 2019-09-18 08:40 hsliuyl 阅读(605) 评论(0) 推荐(0) 编辑

2019年5月6日

将pdf转换为图片,并将图片进行切分

摘要: /// /// 将pdf转换为图片,并且将图片进行切分 /// /// /// void ConvertPDF2Image(string pdfInputPath, ImageFormat imageFormat) { PDFFile pdfFile =... 阅读全文

posted @ 2019-05-06 16:32 hsliuyl 阅读(460) 评论(0) 推荐(0) 编辑

2019年4月28日

python基础系列教程,数学基础系列教程,数据分析系列教程,神经网络系列教程,深度学习系列视频教程分享交流

摘要: 大家好,我是一个技术爱好者,目前对大数据人工智能很是痴迷,虽然学历只有高中,目前正在大踏步的向着人工智能狂奔,如果你也想学习,那就来吧 我的学习进度python基础(Numpy,pandas,matplotlib,seaborn)【学习完毕】,高等数学上册【学习完毕】,线性代数【正在进行...】 学 阅读全文

posted @ 2019-04-28 17:09 hsliuyl 阅读(141) 评论(0) 推荐(0) 编辑

2018年11月23日

matrix矩阵变换参数图形化详解

摘要: 学习视频分享交流群 阅读全文

posted @ 2018-11-23 17:13 hsliuyl 阅读(372) 评论(0) 推荐(0) 编辑

2017年12月25日

电子印章制作管理系统

摘要: 本系统采用位图的方式进行图章信息的绘制 阅读全文

posted @ 2017-12-25 20:14 hsliuyl 阅读(2014) 评论(7) 推荐(0) 编辑

2014年11月13日

c#窗体去掉borderstyle进行拖动

摘要: private void BaseCForm_Load(object sender, EventArgs e) { DrawStyle(); this.panel1.MouseDown += new MouseEventHandler(panel1_MouseDown); this.panel1.M 阅读全文

posted @ 2014-11-13 14:59 hsliuyl 阅读(370) 评论(0) 推荐(0) 编辑

2014年9月3日

动态添加input标签

摘要: <style type="text/css"> .delete_attach { padding-left: 18px; background: url(../image/delete.png) no-repeat left top; margin-left: 7px; width: 90px; c 阅读全文

posted @ 2014-09-03 17:48 hsliuyl 阅读(428) 评论(0) 推荐(0) 编辑

导航

统计

点击右上角即可分享
微信分享提示