您的位置:首页 > 编程语言 > C#

如何在c#中加密数据和解密数据的函数

2008-08-06 17:16 399 查看
         首先要先实例化加解密库类 RSACryptoServiceProvider ,然后再用给定的密钥对他进行初始化,接着声明一个转换函数UTF8Encoding来把要加密的字符串转换成字节数组,接着就可以调用RSACryptoServiceProvider 的Encrypt方法进行加密了,加密返回的是字节组。解密函数的原理也是一样的。大家直接看下面的代码就清楚了,至于为什么要在把字符串加密后返回字节数组而不是字符串,那是因为利用加密函数进行加密时必须要先把字符串转换成字节数组,然后才能加密,加密完以后则不能把加密好的字节数组转换成字符串,否则当你解密时会出现问题的,不信的可以试一试,我觉得可能是当加密好以后的字节数组转换成字符串,再由字符串转换成字节数组进行解密时可能会出现字节错位引起的。有什么不妥的地方请大家指正。
 

using System;
using System.Collections.Generic;
using System.Text;
using System.Security.Cryptography;
using System.IO;

namespace FootBall
{
    public class Function
    {
        /// <summary>
        /// 加密函数
        /// </summary>
        /// <param name="originalData">originalData:原始数据</param>
        /// <param name="key">key:密钥</param>
        /// <returns>返回加密后的数据</returns>
        public static byte[] encryption(String originalData, String key)
        {
            try
            {
                //声明加解密库函数
                RSACryptoServiceProvider crypt = new RSACryptoServiceProvider();

                //加载特定密钥初始化加解密函数
                crypt.FromXmlString(key);

                //声明编码装换函数
                System.Text.UTF8Encoding enc = new UTF8Encoding();

                //把字符串型的原始数据装换成字节型数组
                byte[] bytes = enc.GetBytes(originalData);

                //对转换成字节型数组的原始数据加密
                bytes = crypt.Encrypt(bytes, false);

                //把加密后的字节型数组返回
                return bytes;
            }
            catch
            {
                //如果发生异常则返回空
                return null;
            }
        }

        /// <summary>
        /// 解密函数
        /// </summary>
        /// <param name="encrypteData">encrypteData:加密数据</param>
        /// <param name="key">key:密钥</param>
        /// <returns>返回解密后的数据</returns>
        public static String decryption(byte[] encrypteData, String key)
        {
            try
            {
                //声明加解密库函数
                RSACryptoServiceProvider crypt = new RSACryptoServiceProvider();

                //加载特定密钥初始化加解密函数
                crypt.FromXmlString(key);

                //对装换成字节型数组的加密数据解密
                encrypteData = crypt.Decrypt(encrypteData, false);

                //声明编码装换函数
                System.Text.UTF8Encoding enc = new UTF8Encoding();

                //把解密后的字节型数组转换成字符串后返回
                return enc.GetString(encrypteData);
            }
            catch
            {
                //如果发生异常则返回空
                return null;
            }
        }
    }
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息