基于C#的RSA非对称加密算法

最近在搞单点登录的设计,在设计中需要一个Token令牌的加密传输,这个令牌在整个连接单点的各个站中起着连接认证作用,如果被仿造将会有不可预计的损失,但是这个Token是要可逆的。所以像那种md5,sha之类的不可逆加密就没法用了,然后可逆的加密主要是分为对称加密和非对称加密。

  • 对称加密:用加密的钥匙来解密,比如DES,AES的加解密。
  • 非对称加密:一个钥匙加密,用另一个钥匙解密。

直接看下面的方法:

1、首先生成密钥对

/// <summary>
/// RSA加密的密匙结构  公钥和私匙
/// </summary>
public struct RSAKey
{
    public string PublicKey { get; set; }
    public string PrivateKey { get; set; }
}

#region 得到RSA密匙对
/// <summary>
/// 得到RSA密匙对
/// </summary>
/// <returns></returns>
public static RSAKey GetRASKey()
{
    RSACryptoServiceProvider.UseMachineKeyStore = true;
    RSACryptoServiceProvider rsaProvider = new RSACryptoServiceProvider(DWKEYSIZE);
    RSAParameters p = rsaProvider.ExportParameters(true);

    return new RSAKey()
    {
        PublicKey = ComponentKey(p.Exponent, p.Modulus),
        PrivateKey = ComponentKey(p.D, p.Modulus)
    };
}
#endregion
#region 将密匙组合成base64字符串
/// <summary>
/// 将密钥组合成base64编码字符串
/// </summary>
private static string ComponentKey(byte[] b1, byte[] b2)
{
    List<byte> list = new List<byte>();
    list.Add((byte)b1.Length);
    list.AddRange(b1);
    list.AddRange(b2);
    byte[] b = list.ToArray<byte>();
    return Convert.ToBase64String(b);
}

/// <summary>
/// 从base64字符串,解析原来的密钥
/// </summary>
private static void ResolveKey(string key, out byte[] b1, out byte[] b2)
{
    //从base64字符串 解析成原来的字节数组
    byte[] b = Convert.FromBase64String(key);
    //初始化参数的数组长度
    b1 = new byte[b[0]];
    b2 = new byte[b.Length - b[0] - 1];
    //将相应位置是值放进相应的数组
    for (int n = 1, i = 0, j = 0; n < b.Length; n++)
    {
        if (n <= b[0])
        {
            b1[i++] = b[n];
        }
        else
        {
            b2[j++] = b[n];
        }
    }
}
#endregion
时间: 2024-10-23 23:29:14

基于C#的RSA非对称加密算法的相关文章

SSH加密原理、RSA非对称加密算法学习与理解

首先声明一下,这里所说的SSH,并不是Java传统的三大框架,而是一种建立在应用层和传输层基础上的安全外壳协议,熟悉Linux的朋友经常使用到一 个SSH Secure Shell Cilent的工具,本文也是基于此工具加密原理的学习,在SSH的加密原理中,使用到了RSA非对称加密算法,本文也一并做了学习和了解. 非对称加密算法 在日常的工作生产中, 我们经常需要进行数据的通讯,开发人员经常需要对数据进行加解密操作,以保证数据的安全.数据的加密算法非为对称加密和非对称加密两种,常用的DES.三

非对称加密过程详解(基于RSA非对称加密算法实现)

1.非对称加密过程: 假如现实世界中存在A和B进行通讯,为了实现在非安全的通讯通道上实现信息的保密性.完整性.可用性(即信息安全的三个性质),A和B约定使用非对称加密通道进行通讯,具体过程如下: 说明: 国内目前使用双证书体系,即用户同时拥有签名证书.加密证书两张证书.签名证书是用户的身份认证,是和CA协商的结果,可用于对用户A的身份验证:加密证书是用来对信息进行加密,是用户和秘钥管理系统生成.我们在这里假设都适合CA进行交互. ①:此过程是生成公钥私钥的过程,我们这里基于RSA算法实现,RSA

RSA非对称加密算法

首先要理解的是公钥加密后私钥是可以解密的.私钥加密后公钥也是可以解密的. 公钥和私钥是成对出现的. 一般都是公钥加密,私钥解密. 公钥私钥原理 张三有两把钥匙,一把是公钥,另一把是私钥 张三把公钥送给他的朋友们—-李四.王五.赵六—-每人一把 李四要给张三写一封保密的信.她写完后用张三的公钥加密,就可以达到保密的效果 张三收信后,用私钥解密,就看到了信件内容.这里要强调的是,只要张三的私钥不泄露,这封信就是安全的,即使落在别人手里,也无法解密 张三给李四回信,决定采用“数字签名”.他写完后先用H

第十二章 非对称加密算法-RSA

注意:本节内容主要参考自<Java加密与解密的艺术(第2版)>第8章“高等加密算法--非对称加密算法” 12.1.RSA(最经典的非对称加密算法) 特点: 使用一套密钥即可完成加解密(与DH不同) 与DH不同的第二点是,RSA自己可以完成加解密,而DH需要依赖于对称加密算法 “私钥加密,公钥解密”或“公钥加密,私钥解密” 公钥长度远小于私钥长度(对下边的代码进行测试,自己比较结果) 加解密流程: 1)发送方(假设为甲方)构建密钥对,自己保留私钥,将公钥发送给接收方(假设为乙方) 2)甲方使用密

信息加密之非对称加密算法RSA

前面为大家已经总结了,基于密钥交换的DH算法,现在就为大家再介绍一种基于因子分解的RSA算法,这种加密算法有两种实现形式:1.公钥加密,私钥解密:2.私钥加密,公钥解密.下面就为大家分析一下实现代码,相对于DH算法,RSA显得有些简单.初始化密钥: KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA"); keyPairGenerator.initialize(512); KeyPair keyPa

非对称加密算法-RSA算法

??加密算法分为对称加密算法和非对称加密算法,其中非对称加密算法作为计算机通信安全的基石,在保证数据安全方面起着重要的作用.而相对于对称加密算法的易理解性,非对称加密算法存在一定的难度.下面通过对RSA算法的剖析,让我们更好的理解非对称加密算法的原理. 一.对称加密算法和非对称加密算法 1.对称加密算法 ??对称加密算法:加密和解密都使用同样规则(密钥)的算法. ??(1).A选择某一种规则对信息进行加密: ??(2).B使用同一规则(逆规则)对信息进行解密: 2.非对称加密算法 ??非对称加密

openssl 非对称加密算法RSA命令详解

1.非对称加密算法概述 非对称加密算法也称公开密钥算法,其解决了对称加密算法密钥分配的问题,非对称加密算法基本特点如下: 1.加密密钥和解密密钥不同 2.密钥对中的一个密钥可以公开 3.根据公开密钥很难推算出私人密钥 根据非对称加密算法的特点,可用户数字签名.密钥交换.数据加密.但是由于非对称加密算法较对称加密算法加密速度慢很多,故最常用的用途是数字签名和密钥交换. 目前常用的非对称加密算法有RSA, DH和DSA三种,但并非都可以用于密钥交换和数字签名.而是RSA可用于数字签名和密钥交换,DH

Java 加密解密 对称加密算法 非对称加密算法 MD5 BASE64 AES RSA

[前言] 本文简单的介绍了加密技术相关概念,最后总结了java中现有的加密技术以及用法和样例 [最简单的加密] 1.简单的概念 明文:加密前的信息 密文:机密后的信息 算法:加密或解密的算法 密钥:算法使用的钥匙(读作miyao.正确应该是miyue,可是大家都读miyao) 2.简单的样例 将123456每位数字都加1后得到234567, 当中123456就是明文.234567就是密文.加密密钥就是1,加密算法是每位加 3.对称加密和非对称加密 以上为例. 123456-->234567的加密

Java加密技术(四)非对称加密算法RSA

RSA  这种算法1978年就出现了,它是第一个既能用于数据加密也能用于数字签名的算法.它易于理解和操作,也很流行.算法的名字以发明者的名字命名:Ron Rivest, AdiShamir 和Leonard Adleman. 这种加密算法的特点主要是密钥的变化,上文我们看到DES只有一个密钥.相当于只有一把钥匙,如果这把钥匙丢了,数据也就不安全了.RSA同时有两把钥匙,公钥与私钥.同时支持数字签名.数字签名的意义在于,对传输过来的数据进行校验.确保数据在传输工程中不被修改. 流程分析: 甲方构建