WinRT下的RSA加解密方法
来源:互联网 发布:淘宝大药房是正品吗 编辑:程序博客网 时间:2024/05/16 13:45
RSA公钥加密算法是1977年由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的。当时他们三人都在麻省理工学院工作。RSA就是他们三人姓氏开头字母拼在一起组成的。
本文旨在针对WinRT下RSA加密方法的使用进行演示,希望仅为寻找WinRT下RSA加密可用类的小伙伴不用再寻寻觅觅。
介绍分两步,一是建立RSA工具类,方便调用,二是举个简单的例子。
一、建立RSA工具类
using System;using System.Collections.Generic;using System.Linq;using System.Runtime.InteropServices.WindowsRuntime;using System.Text;using System.Threading.Tasks;using Windows.Security.Cryptography;using Windows.Security.Cryptography.Core;using Windows.Storage.Streams;namespace UIDemo{ public class RSA { /// <summary> /// 产生一对RSA密钥对,公钥加密,私钥解密。 /// 应该静态的保存要使用的密钥对 /// </summary> /// <returns></returns> public static RSAKeyPair CreateRSAKeyPair() { AsymmetricKeyAlgorithmProvider asym = AsymmetricKeyAlgorithmProvider.OpenAlgorithm(AsymmetricAlgorithmNames.RsaPkcs1); CryptographicKey key = asym.CreateKeyPair(1024); IBuffer privateKeyBuffer = key.Export(CryptographicPrivateKeyBlobType.Capi1PrivateKey); IBuffer publicKeyBuffer = key.ExportPublicKey(CryptographicPublicKeyBlobType.Capi1PublicKey); byte[] privateKeyBytes; byte[] publicKeyBytes; CryptographicBuffer.CopyToByteArray(privateKeyBuffer, out privateKeyBytes); CryptographicBuffer.CopyToByteArray(publicKeyBuffer, out publicKeyBytes); string privateKey = Convert.ToBase64String(privateKeyBytes); string publicKey = Convert.ToBase64String(publicKeyBytes); return new RSAKeyPair(privateKey, publicKey); } /// <summary> /// 使用公钥加密 /// </summary> /// <param name="publicKey"></param> /// <param name="data"></param> /// <returns></returns> public static byte[] Encrypt(string publicKey, string data) { IBuffer keyBuffer = CryptographicBuffer.DecodeFromBase64String(publicKey); AsymmetricKeyAlgorithmProvider asym = AsymmetricKeyAlgorithmProvider.OpenAlgorithm(AsymmetricAlgorithmNames.RsaPkcs1); CryptographicKey key = asym.ImportPublicKey(keyBuffer, CryptographicPublicKeyBlobType.Capi1PublicKey); IBuffer plainBuffer = CryptographicBuffer.ConvertStringToBinary(data, BinaryStringEncoding.Utf8); IBuffer encryptedBuffer = CryptographicEngine.Encrypt(key, plainBuffer, null); byte[] encryptedBytes; CryptographicBuffer.CopyToByteArray(encryptedBuffer, out encryptedBytes); return encryptedBytes; } /// <summary> /// 使用私钥解密 /// </summary> /// <param name="privateKey"></param> /// <param name="data"></param> /// <returns></returns> public static string Decrypt(string privateKey, byte[] data) { IBuffer keyBuffer = CryptographicBuffer.DecodeFromBase64String(privateKey); AsymmetricKeyAlgorithmProvider asym = AsymmetricKeyAlgorithmProvider.OpenAlgorithm(AsymmetricAlgorithmNames.RsaPkcs1); CryptographicKey key = asym.ImportKeyPair(keyBuffer, CryptographicPrivateKeyBlobType.Capi1PrivateKey); IBuffer plainBuffer = CryptographicEngine.Decrypt(key, WindowsRuntimeBufferExtensions.AsBuffer(data), null); byte[] plainBytes; CryptographicBuffer.CopyToByteArray(plainBuffer, out plainBytes); return Encoding.UTF8.GetString(plainBytes, 0, plainBytes.Length); } } /// <summary> /// RSA 的公钥与私钥 /// </summary> public class RSAKeyPair { public string PrivateKey { get; set; } public string PublicKey { get; set; } public RSAKeyPair(string privateKey, string publicKey) { PrivateKey = privateKey; PublicKey = publicKey; } }}
RSAKeyPair kp = new RSAKeyPair(null, null); // 通过以下语句生成一对密钥,再保存起来。其中公钥公开给加密方使用,私钥解密用。已保存则加载。 // RSAKeyPair kp = RSA.CreateRSAKeyPair(); // 加载静态密钥对 kp.PrivateKey = "BwIAAACkAABSU0EyAAQAAAEAAQBTiebuzvfndZCcc82O3ax0nRz0U20cDwWDuCKUIpdBPfNQD4gSp61RhMaX0x70IoY2oqnUGlQK1sYZ1vG9F7F7zIIAZVnb+3JwhcHU/4NVbMuS7+NDs5ncOUgiMO2Aj2KNB81gCcYmciv4FiuB8klGiHTwCV0GzrzXTBe/QavjujGOMjswtDFoBa2dgAmhnQXdpJoGRe3cZsyAXNQQvfdvOK/9i732O7DBle71ec0cY7T+993Z39QenI6X3s7N/NPDWhc7klLY04C950BKofjFV4HNVO4QhkTujpPnyfFnI0KVJGwit+tkS65pTBVdZ++EwgMQZug5CRHB2eG347DhsbJZXToWtTbzrDbVU6Oh2fvTYjWRopH4RiJnljr3rHNkBY05qat+jMaiBC8LRn6xUUyp6F3zhCRjcpgdefb/Jt+ujRTHEFOVLGR3S+PVD5/G0plhTW9QbOk30Zp/Tci2gWUs6tEXUElSYrlZJg0PZYVTSACinPzfE4t0tySfessaetdwVlarLjAejnWlx4CT+5BgV55I9FOmdjJSzYK6q4vwnlBOpyvwfL6kJlTW49vat1Syb/TmsjEz4sceDX890Wd0er5S/+eLvhiPfhhplQa2h2PyIOj0pStbF6W5BMV7b1P4JHdDRaQHaTBKMQFXDaFSpWgNbBAELfXHtsGBxcQ5smM1WNOsfYqrKg0OJaxu30QtrAIp0ucZWH1RtuOcneEndeTMtLXkG1vc5m7O9IFzv6GINlcRCZ6MGmbWzxY="; kp.PublicKey = "BgIAAACkAABSU0ExAAQAAAEAAQBTiebuzvfndZCcc82O3ax0nRz0U20cDwWDuCKUIpdBPfNQD4gSp61RhMaX0x70IoY2oqnUGlQK1sYZ1vG9F7F7zIIAZVnb+3JwhcHU/4NVbMuS7+NDs5ncOUgiMO2Aj2KNB81gCcYmciv4FiuB8klGiHTwCV0GzrzXTBe/Qavjug=="; // 加密后形成的加密字节数组 byte[] miBytes = RSA.Encrypt(kp.PublicKey, "hello world!"); // Base64编码文本 string miBase64 = CryptographicBuffer.EncodeToBase64String(WindowsRuntimeBufferExtensions.AsBuffer(miBytes)); // 解密 CryptographicBuffer.CopyToByteArray(CryptographicBuffer.DecodeFromBase64String(miBase64), out miBytes); string ori = RSA.Decrypt(kp.PrivateKey, miBytes); txtInfo.Text = ori;
0 0
- WinRT下的RSA加解密方法
- JS下RSA加解密
- RSA加解密的实现
- [密码学--RSA的加解密]
- RSA加解密的应用
- MAC OSX下的RSA加解密实现
- MD5,RSA与springCode的加解密方法
- java中RSA加解密的实现
- java中RSA加解密的实现
- RSA加解密的长度限制
- java中RSA加解密的实现
- java中RSA加解密的实现
- 基于openssl的RSA加解密实现
- java中RSA加解密的实现
- Java 进行 RSA 加解密的例子
- java中RSA加解密的实现
- java中RSA加解密的实现
- ios、java之间的RSA加解密
- 为什么要使用ZooKeeper
- Android基础篇之Activity(五)-onNewIntent()方法
- MySQL优化之distinct
- java.lang.management.ManagementFactory的JAVA属性
- POJ 1861 && ZOJ 1542--Network 【最小生成树 && kruscal && 水题】
- WinRT下的RSA加解密方法
- zoj 3545 - Rescue the Rabbit(AC自动机+dp)
- USB接口带不动USB移动硬盘的解决方法
- hpuoj1695 一道签到题【KMP】
- IO流之复制文件
- poj 2752 Seek the Name, Seek the Fame (kmp主要问题剖析)
- BZOJ 1502 NOI 2005 月下柠檬树
- 线段树专题 POJ3468 A Simple Problem with Integers
- hdu 5366 The mook jong(dp)