非对称加密rsa的c#实现

小台的IT备忘录 小台的IT备忘录     2022-08-17     203

关键词:

1.对称加密算法

对称加密是最快速、最简单的一种加密方式,加密(encryption)与解密(decryption)用的是同样的密钥(secret key)。

对称加密有很多种算法,由于它效率很高,所以被广泛使用在很多加密协议的核心当中。对称加密通常使用的是相对较小的密钥,

一般小于256 bit。因为密钥越大,加密越强,但加密与解密的过程越慢。如果你只用1 bit来做这个密钥,那黑客们可以先试着用0来解密,

不行的话就再用1解;但如果你的密钥有1 MB大,黑客们可能永远也无法破解,但加密和解密的过程要花费很长的时间。

密钥的大小既要照顾到安全性,也要照顾到效率,是一个trade-off。

常用对称加密:DES、3DES、AES等

(代码后续添加)

 

2.非对称加密算法

非对称加密为数据的加密与解密提供了一个非常安全的方法,它使用了一对密钥,公钥(public key)和私钥(private key)。

私钥只能由一方安全保管,不能外泄,而公钥则可以发给任何请求它的人。非对称加密使用这对密钥中的一个进行加密,而解密则需要另一个密钥。

比如,你向银行请求公钥,银行将公钥发给你,你使用公钥对消息加密,那么只有私钥的持有人--银行才能对你的消息解密。

与对称加密不同的是,银行不需要将私钥通过网络发送出去,因此安全性大大提高。

常用非对称加密:DSA、RSA等

目前C#中提供的RSA非对称加密(其他语言如JAVA是可以逆向加解密的,但没有测试过),只能使用公钥进行加密,只能使用私钥进行解密,不能逆向使用(私钥无法加密,公钥无法解密),

因为这样的安全性更高,不会出现私钥加密后的数据,所有公钥持有者都可以解密的问题,如果一定要有这种需求出现,则可以使用

第三方的加解密组件BouncyCastle来实现

//引入命名空间
using System;
using System.IO;
using System.Text;
using System.Security.Cryptography;


//RSA测试实例
string oldData = "taiyonghai";
CreateRSAKey();
string ciphertext = RSAEncrypt(oldData);
string newData = RSADecrypt(ciphertext);


/// <summary>
/// 创建RSA公钥私钥
/// </summary>
public void CreateRSAKey()
{
    //设置[公钥私钥]文件路径
    string privateKeyPath = @"d:\PrivateKey.xml";
    string publicKeyPath = @"d:\PublicKey.xml";
    //创建RSA对象
    RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
    //生成RSA[公钥私钥]
    string privateKey = rsa.ToXmlString(true);
    string publicKey = rsa.ToXmlString(false);
    //将密钥写入指定路径
    File.WriteAllText(privateKeyPath, privateKey);//文件内包含公钥和私钥
    File.WriteAllText(publicKeyPath, publicKey);//文件内只包含公钥
}
/// <summary>
/// 使用RSA实现加密
/// </summary>
/// <param name="data">加密数据</param>
/// <returns></returns>
public string RSAEncrypt(string data)
{
    //C#默认只能使用[公钥]进行加密(想使用[公钥解密]可使用第三方组件BouncyCastle来实现)
    string publicKeyPath = @"d:\PublicKey.xml";
    string publicKey = File.ReadAllText(publicKeyPath);
    //创建RSA对象并载入[公钥]
    RSACryptoServiceProvider rsaPublic = new RSACryptoServiceProvider();
    rsaPublic.FromXmlString(publicKey);
    //对数据进行加密
    byte[] publicValue = rsaPublic.Encrypt(Encoding.UTF8.GetBytes(data), false);
    string publicStr = Convert.ToBase64String(publicValue);//使用Base64将byte转换为string
    return publicStr;
}
/// <summary>
/// 使用RSA实现解密
/// </summary>
/// <param name="data">解密数据</param>
/// <returns></returns>
public string RSADecrypt(string data)
{
    //C#默认只能使用[私钥]进行解密(想使用[私钥加密]可使用第三方组件BouncyCastle来实现)
    string privateKeyPath = @"d:\PrivateKey.xml";
    string privateKey = File.ReadAllText(privateKeyPath);
    //创建RSA对象并载入[私钥]
    RSACryptoServiceProvider rsaPrivate = new RSACryptoServiceProvider();
    rsaPrivate.FromXmlString(privateKey);
    //对数据进行解密
    byte[] privateValue = rsaPrivate.Decrypt(Convert.FromBase64String(data), false);//使用Base64将string转换为byte
    string privateStr = Encoding.UTF8.GetString(privateValue);
    return privateStr;
}

 

附录:

在线加解密站点:http://web.chacuo.net/netrsakeypair

基于c#的rsa非对称加密算法

...类的不可逆加密就没法用了,然后可逆的加密主要是分为对称加密和非对称加密。对称加密:用加密的钥匙来解密,比如DES,AES的加解密。非对称加密:一个钥匙加密,用另一个钥匙解密。直接看下面的方法:1、 查看详情

非对称加密算法-rsa算法

??加密算法分为对称加密算法和非对称加密算法,其中非对称加密算法作为计算机通信安全的基石,在保证数据安全方面起着重要的作用。而相对于对称加密算法的易理解性,非对称加密算法存在一定的难度。下面通过对RSA算法... 查看详情

go语言实现对称加密算法aesdes3des和非对称加密算法rsa(代码片段)

目录1.对称加密算法1.1特点1.2优缺点1.3go语言实现对称加密算法1.3.1AES1.3.2DES1.3.3DES(CBC模式)2.非对称加密算法2.1特点2.2优缺点2.3go语言实现非对称加密算法2.3.1RSA最后1.对称加密算法1.1特点加密和解密使用的是同一个密钥,数据... 查看详情

jdk自带方法实现rsa非对称加密(代码片段)

1packagejdbc.pro.lin;23importjava.security.InvalidKeyException;4importjava.security.Key;5importjava.security.KeyFactory;6importjava.security.KeyPair;7importjava.security.KeyPairGenerator;8importjava.s 查看详情

加密算法之非对称加密rsa

一:非对称加密的由来   RSA公钥加密算法是1977年由RonRivest、AdiShamirh和LenAdleman在(美国麻省理工学院)开发的。RSA取名来自开发他们三者的名字。RSA是目前最有影响力的公钥加密算法,它能够抵抗到目前为止已知的所... 查看详情

非对称加密技术-rsa算法数学原理分析

非对称加密技术,在现在网络中,有非常广泛应用。加密技术更是数字货币的基础。所谓非对称,就是指该算法需要一对密钥,使用其中一个(公钥)加密,则需要用另一个(私钥)才能解密。但是对于其原理大部分同学应该都... 查看详情

7go密码学(四)非对称加密之rsa

参考技术A对称加密有非常好的安全性,其加解密计算的性能也较高,但其有两个重要缺点:在如今开放的信息社会,秘钥的管理愈加困难,非公开的秘钥机制虽然破解较难,但还是有遭到攻击的可能性,由于对称加密需要加解... 查看详情

非对称加密技术-rsa算法数学原理分析(代码片段)

非对称加密技术,在现在网络中,有非常广泛应用。加密技术更是数字货币的基础。所谓非对称,就是指该算法需要一对密钥,使用其中一个(公钥)加密,则需要用另一个(私钥)才能解密。但是对于其原理大部分同学应该都... 查看详情

使用phpopenssl扩展实现非对称加密

php的openssl扩展可对数据进行签名,也可对数据进行非对称加密。非对称加密使用私钥加密,公钥解密。这里介绍openssl实现非对称加密可使用linux自带的RSA密钥生成工具openssl,获取一对公私钥,也可使用phpopenssl扩展函数生成一对... 查看详情

如何在 C# 中使用 RSA 加密文件(大数据)

...0-11-1500:06:44【问题描述】:我是加密新手。我需要实现非对称加密算法,我认为它使用私钥/公钥。我开始使用RSACryptoServiceProvider的示例。可以加密小数据。但是当在相对较大的数据“2行”上使用它时,我得到异常CryptographicExcept... 查看详情

cwe-780:rsa算法未使用最优非对称加密填充漏洞

不夸张地说,只要有计算机网络的地方就有RSA算法,非对称加密算法的特点是加密秘钥和解密秘钥不同,秘钥分为公钥和私钥,用私钥加密的明文,只能用公钥解密,用公钥加密的明文,只能用私钥解密。RSA非对称加密可以用来... 查看详情

非对称加密算法rsa

...于DH算法,这五个字母全都是人名首字母.DH算法是第一个非对称密码体系.RSA算 查看详情

非对称加密rsa加密文件(代码片段)

RSA加密文件  关于RSA非对称加密很多地方都有讲解。  下面是AES   AES类importjava.io.File;importjava.io.FileInputStream;importjava.io.FileOutputStream;importjava.io.InputStream;importjava.io.OutputStream;importjava.security.Key; 查看详情

个人理解c#对称加密非对称加密散列算法的应用场景

...现了一系列加密算法在System.Security.Cryptography;命名空间下对称加密通过同一密匙进行加密和解密。往往应用在内部数据传输情况下。比如公司a程序和B程序。a程序要给B程序发送数据但是为了防止明文发送数据被窃取。那么我就定... 查看详情

jsencrypt实现前端rsa非对称加密解密(vue项目)

...考技术A最近一个vue项目要求所有密码数据需要使用RSA非对称加密传输,以为挺简单,结果开发过程中还是遇到了些问题,简单做个笔记。同时也希望可以帮助到遇到同样问题的道友门。重点来了:使用jsencrypt实现RSA非对称加解... 查看详情

rsa非对称可逆加密

///<summary>///RSAECC///可逆非对称加密///非对称加密算法的优点是密钥管理很方便,缺点是速度慢。///</summary>usingSystem.Security.Cryptography;publicclassRsaEncrypt///<summary>///publicKey,privateKey///</summary>///<returns></returns>... 查看详情

rsa非对称加密(代码片段)

演示代码:https://pan.baidu.com/s/10rfSUUDEEHvCDEYH0oEVCw Base64工具类,可以让rsa编码的乱码变成一串字符序列1packagecom.utils;23importjava.io.ByteArrayInputStream;4importjava.io.ByteArrayOutputStream;5importjava.io.File;6 查看详情

rsa---应用最广泛的非对称加密算法

packagecom.ant.jdk8.encrypt;importorg.apache.commons.io.FileUtils;importjavax.crypto.BadPaddingException;importjavax.crypto.Cipher;importjavax.crypto.IllegalBlockSizeException;importjavax.crypto.NoSuc 查看详情