.NET实现RSA算法的加密解密

在项目中经常会使用到一些加密场合,涉及的加密算法常有RSA算法,base32算法,恰好最近有用到RSA加密解密算法,以此篇文章记录一下。

RSA加密是一种非对称加密。可以在不直接传递密钥的情况下,完成解密。这能够确保信息的安全性,避免了直接传递密钥所造成的被破解的风险。是由一对密钥来进行加解密的过程,分别称为公钥和私钥。两者之间有数学相关,该加密算法的原理就是对一极大整数做因数分解的困难性来保证安全性。通常个人保存私钥,公钥是公开的(可能同时多人持有)。

.net实现RSA加密解密算法需要引用System.Security.Cryptography程序集。

所有的加密解密操作均使用加密服务提供程序 (CSP) 提供的 System.Security.Cryptography.RSA 算法的实现。

实现加密解密需要执行不对称加密和解密的RSACryptoServiceProvider类的实例

        /// <summary>
        /// 构造函数,初始化不对称加密和解密的RSACryptoServiceProvider类的实例
        /// </summary>
        public RSACrypt()
        {
            if (!string.IsNullOrEmpty(privateKey))
            {
                _privateKeyRsaProvider = CreateRsaProviderFromPrivateKey(privateKey);
            }

            if (!string.IsNullOrEmpty(publicKey))
            {
                _publicKeyRsaProvider = CreateRsaProviderFromPublicKey(publicKey);
            }
        }

其中CreateRsaProviderFromPrivateKey和CreateRsaProviderFromPublicKey方法均需要自己实现,因为RSACryptoServiceProvider提供的加密解密方法,均需把公钥和私钥转换成2进制数据。

初始化RSACryptoServiceProvider的实例后,我们便可以实现加密和解密操作了。

        /// <summary>
        /// 解密
        /// </summary>
        /// <param name="cipherText"></param>
        /// <returns></returns>
        public string Decrypt(string cipherText)
        {
            if (_privateKeyRsaProvider == null)
            {
                throw new Exception("_privateKeyRsaProvider is null");
            }
            return Encoding.UTF8.GetString(_privateKeyRsaProvider.Decrypt(System.Convert.FromBase64String(cipherText), false));
        }

        /// <summary>
        /// 加密
        /// </summary>
        /// <param name="text"></param>
        /// <returns></returns>
        public string Encrypt(string text)
        {
            if (_publicKeyRsaProvider == null)
            {
                throw new Exception("_publicKeyRsaProvider is null");
            }
            return Convert.ToBase64String(_publicKeyRsaProvider.Encrypt(Encoding.UTF8.GetBytes(text), false));
        }

实现效果如下:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
RSA算法是一种非对称加密算法,它的加密和解密使用的是不同的密钥,其中公钥用于加密,私钥用于解密。RSA算法是目前应用最广泛的公钥加密算法之一。 RSA算法的加密过程如下: 1. 首先选择两个质数p和q,并计算它们的乘积n=p*q; 2. 选择一个整数e,使得e与(p-1)*(q-1)互质; 3. 计算d,使得d*e ≡ 1 (mod (p-1)*(q-1)); 4. 将n和e作为公钥,n和d作为私钥; 5. 要加密明文m,计算c ≡ m^e (mod n),得到密文c。 RSA算法的解密过程如下: 1. 使用私钥(n,d)解密密文c,得到明文m ≡ c^d (mod n)。 下面是RSA算法的加解密示例代码: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <math.h> // 计算a^b mod n int mod_pow(int a, int b, int n) { int result = 1; a = a % n; while (b > 0) { if (b & 1) { result = (result * a) % n; } b >>= 1; a = (a * a) % n; } return result; } // 求最大公约数 int gcd(int a, int b) { if (b == 0) { return a; } return gcd(b, a % b); } // 计算d*e ≡ 1 (mod (p-1)*(q-1)) int calc_d(int e, int p, int q) { int fn = (p - 1) * (q - 1); int d = 0; while (1) { d++; if ((d * e) % fn == 1) { break; } } return d; } // 加密 int encrypt(int m, int e, int n) { return mod_pow(m, e, n); } // 解密 int decrypt(int c, int d, int n) { return mod_pow(c, d, n); } int main() { int p = 61, q = 53; // 选择两个质数p和q int n = p * q; // 计算n int fn = (p - 1) * (q - 1); // 计算(p-1)*(q-1) int e = 17; // 选择e,使得e与fn互质 int d = calc_d(e, p, q); // 计算d printf("公钥:(%d,%d)\n", n, e); printf("私钥:(%d,%d)\n", n, d); // 加密明文m int m = 12345; int c = encrypt(m, e, n); printf("明文:%d,密文:%d\n", m, c); // 解密密文c int dm = decrypt(c, d, n); printf("解密密文:%d\n", dm); return 0; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值