找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 4712|回复: 1

[分享] [转贴]我的Base64编码,去掉等号特殊字符

[复制链接]

已领礼包: 1268个

财富等级: 财源广进

发表于 2013-6-15 05:58:21 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
  1. /// <summary>自定义包含指定字符的base64工具</summary>
  2.     internal static class Base64Helper
  3.     {
  4.         static readonly string base64Table = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_-";
  5.         static readonly int[] base64Index = new int[]
  6.         {
  7.             -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
  8.             -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
  9.             -1,63,-1,-1,52,53,54,55,56,57,58,59,60,61,-1,-1,-1,-1,-1,-1,-1,0,1,
  10.             2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,-1,
  11.             -1,-1,-1,62,-1,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,
  12.             43,44,45,46,47,48,49,50,51,-1,-1,-1,-1,-1,-1
  13.         };
  14.         public static byte[] FromBase64String(string inData)
  15.         {
  16.             int inDataLength = inData.Length;
  17.             int lengthmod4 = inDataLength % 4;
  18.             int calcLength = (inDataLength - lengthmod4);
  19.             byte[] outData = new byte[inDataLength / 4 * 3 + 3];
  20.             int j = 0;
  21.             int i;
  22.             int num1, num2, num3, num4;
  23.             for (i = 0; i < calcLength; i += 4, j += 3)
  24.             {
  25.                 num1 = base64Index[inData[i]];
  26.                 num2 = base64Index[inData[i + 1]];
  27.                 num3 = base64Index[inData[i + 2]];
  28.                 num4 = base64Index[inData[i + 3]];
  29.                 outData[j] = (byte)((num1 << 2) | (num2 >> 4));
  30.                 outData[j + 1] = (byte)(((num2 << 4) & 0xf0) | (num3 >> 2));
  31.                 outData[j + 2] = (byte)(((num3 << 6) & 0xc0) | (num4 & 0x3f));
  32.             }
  33.             i = calcLength;
  34.             switch (lengthmod4)
  35.             {
  36.                 case 3:
  37.                     num1 = base64Index[inData[i]];
  38.                     num2 = base64Index[inData[i + 1]];
  39.                     num3 = base64Index[inData[i + 2]];
  40.                     outData[j] = (byte)((num1 << 2) | (num2 >> 4));
  41.                     outData[j + 1] = (byte)(((num2 << 4) & 0xf0) | (num3 >> 2));
  42.                     j += 2;
  43.                     break;
  44.                 case 2:
  45.                     num1 = base64Index[inData[i]];
  46.                     num2 = base64Index[inData[i + 1]];
  47.                     outData[j] = (byte)((num1 << 2) | (num2 >> 4));
  48.                     j += 1;
  49.                     break;
  50.             }
  51.             Array.Resize(ref outData, j);
  52.             return outData;
  53.         }
  54.         public static string ToBase64String(byte[] inData)
  55.         {
  56.             int inDataLength = inData.Length;
  57.             int outDataLength = (int)(inDataLength / 3 * 4) + 4;
  58.             char[] outData = new char[outDataLength];
  59.             int lengthmod3 = inDataLength % 3;
  60.             int calcLength = (inDataLength - lengthmod3);
  61.             int j = 0;
  62.             int i;
  63.             for (i = 0; i < calcLength; i += 3, j += 4)
  64.             {
  65.                 outData[j] = base64Table[inData[i] >> 2];
  66.                 outData[j + 1] = base64Table[((inData[i] & 0x03) << 4) | (inData[i + 1] >> 4)];
  67.                 outData[j + 2] = base64Table[((inData[i + 1] & 0x0f) << 2) | (inData[i + 2] >> 6)];
  68.                 outData[j + 3] = base64Table[(inData[i + 2] & 0x3f)];
  69.             }
  70.             i = calcLength;
  71.             switch (lengthmod3)
  72.             {
  73.                 case 2:
  74.                     outData[j] = base64Table[inData[i] >> 2];
  75.                     outData[j + 1] = base64Table[((inData[i] & 0x03) << 4) | (inData[i + 1] >> 4)];
  76.                     outData[j + 2] = base64Table[(inData[i + 1] & 0x0f) << 2];
  77.                     j += 3;
  78.                     break;
  79.                 case 1:
  80.                     outData[j] = base64Table[inData[i] >> 2];
  81.                     outData[j + 1] = base64Table[(inData[i] & 0x03) << 4];
  82.                     j += 2;
  83.                     break;
  84.             }
  85.             return new string(outData, 0, j);
  86.         }
  87.         public static string Base64Encode(string source)
  88.         {
  89.             byte[] barray = Encoding.Default.GetBytes(source);
  90.             return Base64Helper.ToBase64String(barray);
  91.         }
  92.         public static string Base64Decode(string source)
  93.         {
  94.             byte[] barray = Base64Helper.FromBase64String(source);
  95.             return Encoding.Default.GetString(barray);
  96.         }
  97.     }
复制代码

评分

参与人数 1D豆 +5 收起 理由
ScmTools + 5 很给力!经验;技术要点;资料分享奖!

查看全部评分

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 1632个

财富等级: 堆金积玉

发表于 2013-6-15 12:24:47 | 显示全部楼层
另一类的字符串处理,思路不错
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-5-1 19:48 , Processed in 0.351433 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表