1. public class Base64
  2. {
  3. #region Base64加密
  4. ///<summary>
  5. ///Base64加密
  6. ///</summary>
  7. ///<paramname="Message"></param>
  8. ///<returns></returns>
  9. public static string Base64Code(string Message)
  10. {
  11. char[] Base64Code = new char[] { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '', '', '', '', '', '', '', '', '', '', '+', '/', '=' };
  12. byte empty = (byte);
  13. System.Collections.ArrayList byteMessage = new System.Collections.ArrayList(System.Text.Encoding.Default.GetBytes(Message));
  14. System.Text.StringBuilder outmessage;
  15. int messageLen = byteMessage.Count;
  16. //将字符分成3个字节一组,如果不足,则以0补齐
  17. int page = messageLen / ;
  18. int use = ;
  19. if ((use = messageLen % ) > )
  20. {
  21. for (int i = ; i < - use; i++) byteMessage.Add(empty);
  22. page++;
  23. }
  24. //将3个字节的每组字符转换成4个字节一组的。3个一组,一组一组变成4个字节一组
  25. //方法是:转换成ASCII码,按顺序排列24位数据,再把这24位数据分成4组,即每组6位。再在每组的的最高位前补两个0凑足一个字节。
  26. outmessage = new System.Text.StringBuilder(page * ); for (int i = ; i < page; i++)
  27. {
  28. //取一组3个字节的组
  29. byte[] instr = new byte[]; instr[] = (byte)byteMessage[i * ]; instr[] = (byte)byteMessage[i * + ]; instr[] = (byte)byteMessage[i * + ];
  30. //六个位为一组,补0变成4个字节
  31. int[] outstr = new int[];
  32. //第一个输出字节:取第一输入字节的前6位,并且在高位补0,使其变成8位(一个字节)
  33. outstr[] = instr[] >> ;
  34. //第二个输出字节:取第一输入字节的后2位和第二个输入字节的前4位(共6位),并且在高位补0,使其变成8位(一个字节)
  35. outstr[] = ((instr[] & 0x03) << ) ^ (instr[] >> );
  36. //第三个输出字节:取第二输入字节的后4位和第三个输入字节的前2位(共6位),并且在高位补0,使其变成8位(一个字节)
  37. if (!instr[].Equals(empty)) outstr[] = ((instr[] & 0x0f) << ) ^ (instr[] >> ); else outstr[] = ;
  38. //第四个输出字节:取第三输入字节的后6位,并且在高位补0,使其变成8位(一个字节)
  39. if (!instr[].Equals(empty)) outstr[] = (instr[] & 0x3f); else outstr[] = ; outmessage.Append(Base64Code[outstr[]]);
  40. outmessage.Append(Base64Code[outstr[]]);
  41. outmessage.Append(Base64Code[outstr[]]);
  42. outmessage.Append(Base64Code[outstr[]]);
  43. }
  44. return outmessage.ToString();
  45. }
  46. #endregion Base64加密
  47. #region Base64解密
  48. ///<summary>///Base64解密
  49. ///</summary>
  50. ///<paramname="Message"></param>
  51. ///<returns></returns>
  52. public static string Base64Decode(string Message)
  53. {
  54. if ((Message.Length % ) != )
  55. {
  56. throw new ArgumentException("不是正确的BASE64编码,请检查。", "Message");
  57. }
  58. if (!System.Text.RegularExpressions.Regex.IsMatch(Message, "^[A-Z0-9/+=]*$", System.Text.RegularExpressions.RegexOptions.IgnoreCase))
  59. {
  60. throw new ArgumentException("包含不正确的BASE64编码,请检查。", "Message");
  61. }
  62. string Base64Code = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
  63. int page = Message.Length / ;
  64. System.Collections.ArrayList outMessage = new System.Collections.ArrayList(page * );
  65. char[] message = Message.ToCharArray();
  66. for (int i = ; i < page; i++)
  67. {
  68. byte[] instr = new byte[];
  69. instr[] = (byte)Base64Code.IndexOf(message[i * ]);
  70. instr[] = (byte)Base64Code.IndexOf(message[i * + ]);
  71. instr[] = (byte)Base64Code.IndexOf(message[i * + ]);
  72. instr[] = (byte)Base64Code.IndexOf(message[i * + ]);
  73. byte[] outstr = new byte[];
  74. outstr[] = (byte)((instr[] << ) ^ ((instr[] & 0x30) >> ));
  75. if (instr[] != )
  76. {
  77. outstr[] = (byte)((instr[] << ) ^ ((instr[] & 0x3c) >> ));
  78. }
  79. else
  80. {
  81. outstr[] = ;
  82. }
  83. if (instr[] != )
  84. {
  85. outstr[] = (byte)((instr[] << ) ^ instr[]);
  86. }
  87. else
  88. {
  89. outstr[] = ;
  90. }
  91. outMessage.Add(outstr[]);
  92. if (outstr[] != ) outMessage.Add(outstr[]);
  93. if (outstr[] != ) outMessage.Add(outstr[]);
  94. }
  95. byte[] outbyte = (byte[])outMessage.ToArray(Type.GetType("System.Byte"));
  96. return System.Text.Encoding.Default.GetString(outbyte);
  97. }
  98. #endregion Base64解密
  99. #region RSA加密解密
  100. /// <summary>
  101. /// RSA加密
  102. /// </summary>
  103. /// <param name="publickey"></param>
  104. /// <param name="content"></param>
  105. /// <returns></returns>
  106. public static string RSAEncrypt(string publickey, string content)
  107. {
  108. publickey = @"<RSAKeyValue><Modulus>5m9m14XH3oqLJ8bNGw9e4rGpXpcktv9MSkHSVFVMjHbfv+SJ5v0ubqQxa5YjLN4vc49z7SVju8s0X4gZ6AzZTn06jzWOgyPRV54Q4I0DCYadWW4Ze3e+BOtwgVU1Og3qHKn8vygoj40J6U85Z/PTJu3hN1m75Zr195ju7g9v4Hk=</Modulus><Exponent>AQAB</Exponent></RSAKeyValue>";
  109. RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
  110. byte[] cipherbytes;
  111. rsa.FromXmlString(publickey);
  112. cipherbytes = rsa.Encrypt(Encoding.UTF8.GetBytes(content), false);
  113.  
  114. return Convert.ToBase64String(cipherbytes);
  115. }
  116.  
  117. /// <summary>
  118. /// RSA解密
  119. /// </summary>
  120. /// <param name="privatekey"></param>
  121. /// <param name="content"></param>
  122. /// <returns></returns>
  123. public static string RSADecrypt(string privatekey, string content)
  124. {
  125. privatekey = @"<RSAKeyValue><Modulus>5m9m14XH3oqLJ8bNGw9e4rGpXpcktv9MSkHSVFVMjHbfv+SJ5v0ubqQxa5YjLN4vc49z7SVju8s0X4gZ6AzZTn06jzWOgyPRV54Q4I0DCYadWW4Ze3e+BOtwgVU1Og3qHKn8vygoj40J6U85Z/PTJu3hN1m75Zr195ju7g9v4Hk=</Modulus><Exponent>AQAB</Exponent><P>/hf2dnK7rNfl3lbqghWcpFdu778hUpIEBixCDL5WiBtpkZdpSw90aERmHJYaW2RGvGRi6zSftLh00KHsPcNUMw==</P><Q>6Cn/jOLrPapDTEp1Fkq+uz++1Do0eeX7HYqi9rY29CqShzCeI7LEYOoSwYuAJ3xA/DuCdQENPSoJ9KFbO4Wsow==</Q><DP>ga1rHIJro8e/yhxjrKYo/nqc5ICQGhrpMNlPkD9n3CjZVPOISkWF7FzUHEzDANeJfkZhcZa21z24aG3rKo5Qnw==</DP><DQ>MNGsCB8rYlMsRZ2ek2pyQwO7h/sZT8y5ilO9wu08Dwnot/7UMiOEQfDWstY3w5XQQHnvC9WFyCfP4h4QBissyw==</DQ><InverseQ>EG02S7SADhH1EVT9DD0Z62Y0uY7gIYvxX/uq+IzKSCwB8M2G7Qv9xgZQaQlLpCaeKbux3Y59hHM+KpamGL19Kg==</InverseQ><D>vmaYHEbPAgOJvaEXQl+t8DQKFT1fudEysTy31LTyXjGu6XiltXXHUuZaa2IPyHgBz0Nd7znwsW/S44iql0Fen1kzKioEL3svANui63O3o5xdDeExVM6zOf1wUUh/oldovPweChyoAdMtUzgvCbJk1sYDJf++Nr0FeNW1RB1XG30=</D></RSAKeyValue>";
  126. RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
  127. byte[] cipherbytes;
  128. rsa.FromXmlString(privatekey);
  129. cipherbytes = rsa.Decrypt(Convert.FromBase64String(content), false);
  130.  
  131. return Encoding.UTF8.GetString(cipherbytes);
  132. }
  133. #endregion RSA加密解密
  134.  
  135. }

C#帮助类:Base64的更多相关文章

  1. 二进制;16进制; Byte , Python的bytes类; Base64数据编码; Bae64模块;

    参考:中文维基 二进制 位操作(wiki) Byte字节 互联网数据处理:Base64数据编码 Python的模块Base64 16进制简介 python: bytes对象 字符集介绍:ascii 二 ...

  2. Base64加密解密工具类

    使用Apache commons codec类Base64进行加密解密 maven依赖 <dependency> <groupId>commons-codec</grou ...

  3. Java Base64 加密解密

    使用JDK的类 BASE64Decoder  BASE64Encoder package test; import sun.misc.BASE64Decoder; import sun.misc.BA ...

  4. Serializable 序列化为字符串 base64

    工具类 Base64.java import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import ja ...

  5. Java类的继承与多态特性-入门笔记

    相信对于继承和多态的概念性我就不在怎么解释啦!不管你是.Net还是Java面向对象编程都是比不缺少一堂课~~Net如此Java亦也有同样的思想成分包含其中. 继承,多态,封装是Java面向对象的3大特 ...

  6. Java Base64加密解密

    使用Apache commons codec 类Base64 maven依赖 <dependency> <groupId>commons-codec</groupId&g ...

  7. Java的Base64加密原理

    出自:   http://www.cnblogs.com/winner-0715/p/5920269.html http://www.cnblogs.com/koliop090/p/5203553.h ...

  8. Base64加密工具

    正常来讲加密基本上永远都要伴随着解密,所谓的加密或者解密,往往都需要有一些规则,在JDK1.8开始,提供有新的加密处理操作类,Base64处理类--Base64类 在该类之中存在两个内部类:Base6 ...

  9. Java开发工具类集合

    Java开发工具类集合 01.MD5加密工具类 import java.security.MessageDigest; import java.security.NoSuchAlgorithmExce ...

  10. Kotlin/Java Base64编码和解码(图片、文件)

    原文: Kotlin/Java Base64编码和解码(图片.文件) | Stars-One的杂货小窝 最近在项目中使用到了Base64编码和解码,便是稍微写篇文章记录一下 PS:本文代码都是使用Ko ...

随机推荐

  1. 【转】在Linux下使用Jmeter执行测试任务

    想在Linux下运行jmeter必须先安装jdk,安装步骤如下: (1).下载一个linux可用的jdk包(比如:jdk-6u45-linux-i586.bin), (2).然后将jdk-6u45-l ...

  2. (转)Docker - 使用 compose 编排服务

    在园子里看到了这篇关于 compose 的文章,非常好!!转过来,先附上原文地址 http://www.cnblogs.com/52fhy/p/5991344.html ----- 入门示例 一般步骤 ...

  3. jenkins学习(1)

    (1)  按照JAVA, 增加环境变量JAVA_HOME     =      C:\Program Files\Java\jdk1.8.0_31  增加环境变量CLASS_PATH     =   ...

  4. PHP AST学习

    前一阵和前同事交流在检测webshell方面的相关方法,其中提出了使用lex yacc做一套语法解析来解析字节码段来判断是否存在webshell. 后来在查找相关资料中,找到了github开源的一个工 ...

  5. Java微信公众平台开发--番外篇,对GlobalConstants文件的补充

    转自:http://www.cuiyongzhi.com/post/63.html 之前发过一个[微信开发]系列性的文章,也引来了不少朋友观看和点评交流,可能我在写文章时有所疏忽,对部分文件给出的不是 ...

  6. BeX5 常见问题解决办法

    1.获取当前Activity的名称 Activity activity = ProcessUtils.getActivityInProcessContext(); String activityNam ...

  7. beijing

    #include<stdio.h> #include<string.h> #include<stdlib.h> #include<graphics.h> ...

  8. POJ3017

    题意 将一段序列分割为任意段,每一段的连续和不超过M,使得每一段最大值的和最小. 分析 用单调队列进行优化的dp.单调队列可以维护可以影响当前区间的最大值. #include <cstdio&g ...

  9. opennebula kvm 创建VM oned报错日志

    Thu Jul :: [ReM][D]: Req: UID: VirtualMachineDeploy result SUCCESS, Thu Jul :: [TM][D]: Message rece ...

  10. Hyperledger Fabric1.0 整体结构

    整体结构 Hyperledger Fabric 在 1.0 中,架构已经解耦为三部分: fabric-peer:主要起到 peer 作用,包括 endorser.committer 两种角色: fab ...