WEB开发网
开发学院软件开发C语言 C# 基于大整数类的RSA算法实现(公钥加密解密,私... 阅读

C# 基于大整数类的RSA算法实现(公钥加密解密,私钥加密解密)

 2009-04-27 08:27:42 来源:WEB开发网   
核心提示: 注:分块大小最大理论值是128位,但是考虑到实际使用中可能会有位溢出的情况,C# 基于大整数类的RSA算法实现(公钥加密解密,私钥加密解密)(8),所以此处使用120将biginteger对象转为byte数组时,原本采用的是BigIneger类提供的GetBytes()方法,经过10000

注:分块大小最大理论值是128位。但是考虑到实际使用中可能会有位溢出的情况,所以此处使用120

将biginteger对象转为byte数组时,原本采用的是BigIneger类提供的GetBytes()方法,但是实际使用中发现,此方法取得的byte数组有一定的几率会出现偏差。所以改成使用ToHexString()方法取得16进制字符串再转成byte数组。

为了解密时byte数组块长度固定,补位操作必须执行。

解密

        /// <summary>
        /// 解密字符数组
        /// </summary>
        /// <param name="dataBytes">待解密字符数组</param>
        /// <param name="KeyNum">密钥大素数</param>
        /// <param name="nNum">大整数N</param>
        /// <returns>解密结果</returns>
        private string DecryptBytes(byte[] dataBytes, BigInteger KeyNum, BigInteger nNum)
        {
            int len = dataBytes.Length;
            int len1 = 0;
            int blockLen = 0;
            if (len % 128 == 0)
            {
                len1 = len / 128;
            }
            else
            {
                len1 = len / 128 + 1;
            }
            List<byte> tempbytes = new List<byte>();
            for (int i = 0; i < len1; i++)
            {
                if (len >= 128)
                {
                    blockLen = 128;
                }
                else
                {
                    blockLen = len;
                }
                byte[] oText = new byte[blockLen];
                Array.Copy(dataBytes, i * 128, oText, 0, blockLen);
                BigInteger biText = new BigInteger(oText);
                BigInteger biEnText = biText.modPow(KeyNum, nNum);
                byte[] testbyte= biEnText.getBytes();
                string str = Encoding.UTF8.GetString(testbyte);
                tempbytes.AddRange(testbyte);
                len -= blockLen;
            }
            return System.Text.Encoding.UTF8.GetString(tempbytes.ToArray());
        }

基本算法就是这样,经过10000次测试,没有误差出现。下面是算法实现的类和在网上找到的大整数类。

上一页  3 4 5 6 7 8 

Tags:基于 整数 RSA

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接