C#下对称算法、非对称算法生成秘钥
来源:互联网 发布:单片机程序烧录软件 编辑:程序博客网 时间:2024/06/06 19:40
一个简单的帮助类,因为后面的加密、解密算法要用到,所以这里单独写下
using System.Security.Cryptography; public class KeyGenerator { /// <summary> /// 随机生成秘钥(对称算法) /// </summary> /// <param name="key">秘钥(base64格式)</param> /// <param name="iv">iv向量(base64格式)</param> /// <param name="keySize">要生成的KeySize,每8个byte是一个字节,注意每种算法支持的KeySize均有差异,实际可通过输出LegalKeySizes来得到支持的值</param> public static void CreateSymmetricAlgorithmKey<T>(out string key, out string iv, int keySize) where T : SymmetricAlgorithm, new() { using (T t = new T()) {#if DEBUG Console.WriteLine(string.Join("", t.LegalKeySizes.Select(k => string.Format("MinSize:{0} MaxSize:{1} SkipSize:{2}", k.MinSize, k.MaxSize, k.SkipSize))));#endif t.KeySize = keySize; t.GenerateIV(); t.GenerateKey(); iv = Convert.ToBase64String(t.IV); key = Convert.ToBase64String(t.Key); } } /// <summary> /// 随机生成秘钥(非对称算法) /// </summary> /// <typeparam name="T"></typeparam> /// <param name="publicKey">公钥(Xml格式)</param> /// <param name="privateKey">私钥(Xml格式)</param> /// <param name="provider">用于生成秘钥的非对称算法实现类,因为非对称算法长度需要在构造函数传入,所以这里只能传递算法类</param> public static void CreateAsymmetricAlgorithmKey<T>(out string publicKey, out string privateKey, T provider = null) where T : AsymmetricAlgorithm, new() { if (provider == null) { provider = new T(); } using (provider) {#if DEBUG Console.WriteLine(string.Join("", provider.LegalKeySizes.Select(k => string.Format("MinSize:{0} MaxSize:{1} SkipSize:{2}", k.MinSize, k.MaxSize, k.SkipSize))));#endif publicKey = provider.ToXmlString(false); privateKey = provider.ToXmlString(true); } } }测试代码如下,这里分别用3DES和RSA做例子
string key, iv; KeyGenerator.CreateSymmetricAlgorithmKey<TripleDESCryptoServiceProvider>(out key, out iv, 128); Console.WriteLine(key.Length); KeyGenerator.CreateSymmetricAlgorithmKey<TripleDESCryptoServiceProvider>(out key, out iv, 192); Console.WriteLine(key.Length); string privateKey, publicKey; for (var i = 800; i < 2000; i += 8) { using (RSACryptoServiceProvider provider = new RSACryptoServiceProvider(i)) { KeyGenerator.CreateAsymmetricAlgorithmKey<RSACryptoServiceProvider>(out publicKey, out privateKey, provider); Console.WriteLine(privateKey.Length); } }
0 0
- C#下对称算法、非对称算法生成秘钥
- C#实现非对称加密RSA算法
- 非对称算法解释
- 非对称算法----RSA算法
- 对称加密 非对称加密,常见算法
- C#对称算法加密
- 非对称加密算法-DH算法
- 非对称加密算法-RSA算法
- 非对称加密算法-ElGamal算法
- 非对称加密算法-DH算法
- 非对称加密算法-DH算法
- 非对称加密---RSA算法
- SM2非对称密码算法
- 非对称加密 RSA算法
- 信息安全——对称算法与非对称算法
- 直线生成算法---对称DDA
- C#版非对称算法RSA简单代码示例
- 对称算法
- lazy(懒加载)模式和异步加载模式详解
- Android Handler内部类+WeakReference
- StandardWrapper.Throwable 錯誤
- YUV视频格式到RGB32格式转换的速度优化 上篇
- SharedPreferences 超强工具类
- C#下对称算法、非对称算法生成秘钥
- 准备开始写博客啦。。
- 浅谈OCR之Tesseract
- leetcode 43. Multiply Strings
- PHP随机数字母加数字
- android几种常见弹出窗口实现
- Windows Eclipse远程调试hadoop:ExitCodeException exitCode=-1073741515
- 郭大侠与线上游戏
- YUV视频格式到RGB32格式转换的速度优化 中篇