C# 的base64加密的类。可以用于把post改为get传递数据

自己完成算法实现

方法一: ///<summary>

///Base64加密

///</summary>

///<paramname="Message"></param>

///<returns></returns>

publicstringBase64Code(stringMessage)

{

char[]Base64Code=newchar[]{‘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‘,‘0‘,‘1‘,‘2‘,‘3‘,‘4‘,‘5‘,‘6‘,‘7‘,

‘8‘,‘9‘,‘+‘,‘/‘,‘=‘};

byteempty=(byte)0;

System.Collections.ArrayListbyteMessage=newSystem.Collections.ArrayList(System.Text.Encoding.Default.GetBytes(Message));

System.Text.StringBuilderoutmessage;

intmessageLen=byteMessage.Count;

//将字符分成3个字节一组,如果不足,则以0补齐

intpage=messageLen/3;

intuse=0;

if((use=messageLen%3)>0)

{

for(inti=0;i<3-use;i++)

byteMessage.Add(empty);

page++;

}

//将3个字节的每组字符转换成4个字节一组的。3个一组,一组一组变成4个字节一组

//方法是:转换成ASCII码,按顺序排列24位数据,再把这24位数据分成4组,即每组6位。再在每组的的最高位前补两个0凑足一个字节。

outmessage=newSystem.Text.StringBuilder(page*4);

for(inti=0;i<page;i++)

{

//取一组3个字节的组

byte[]instr=newbyte[3];

instr[0]=(byte)byteMessage[i*3];

instr[1]=(byte)byteMessage[i*3+1];

instr[2]=(byte)byteMessage[i*3+2];

//六个位为一组,补0变成4个字节

int[]outstr=newint[4];

//第一个输出字节:取第一输入字节的前6位,并且在高位补0,使其变成8位(一个字节)

outstr[0]=instr[0]>>2;

//第二个输出字节:取第一输入字节的后2位和第二个输入字节的前4位(共6位),并且在高位补0,使其变成8位(一个字节)

outstr[1]=((instr[0]&0x03)<<4)^(instr[1]>>4);

//第三个输出字节:取第二输入字节的后4位和第三个输入字节的前2位(共6位),并且在高位补0,使其变成8位(一个字节)

if(!instr[1].Equals(empty))

outstr[2]=((instr[1]&0x0f)<<2)^(instr[2]>>6);

else

outstr[2]=64;

//第四个输出字节:取第三输入字节的后6位,并且在高位补0,使其变成8位(一个字节)

if(!instr[2].Equals(empty))

outstr[3]=(instr[2]&0x3f);

else

outstr[3]=64;

outmessage.Append(Base64Code[outstr[0]]);

outmessage.Append(Base64Code[outstr[1]]);

outmessage.Append(Base64Code[outstr[2]]);

outmessage.Append(Base64Code[outstr[3]]);

}

returnoutmessage.ToString();

}

///<summary>

///Base64解密

///</summary>

///<paramname="Message"></param>

///<returns></returns>

publicstringBase64Decode(stringMessage)

{

if((Message.Length%4)!=0)

{

thrownewArgumentException("不是正确的BASE64编码,请检查。","Message");

}

if(!System.Text.RegularExpressions.Regex.IsMatch(Message,"^[A-Z0-9/+=]*$",System.Text.RegularExpressions.RegexOptions.IgnoreCase))

{

thrownewArgumentException("包含不正确的BASE64编码,请检查。","Message");

}

stringBase64Code="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";

intpage=Message.Length/4;

System.Collections.ArrayListoutMessage=newSystem.Collections.ArrayList(page*3);

char[]message=Message.ToCharArray();

for(inti=0;i<page;i++)

{

byte[]instr=newbyte[4];

instr[0]=(byte)Base64Code.IndexOf(message[i*4]);

instr[1]=(byte)Base64Code.IndexOf(message[i*4+1]);

instr[2]=(byte)Base64Code.IndexOf(message[i*4+2]);

instr[3]=(byte)Base64Code.IndexOf(message[i*4+3]);

byte[]outstr=newbyte[3];

outstr[0]=(byte)((instr[0]<<2)^((instr[1]&0x30)>>4));

if(instr[2]!=64)

{

outstr[1]=(byte)((instr[1]<<4)^((instr[2]&0x3c)>>2));

}

else

{

outstr[2]=0;

}

if(instr[3]!=64)

{

outstr[2]=(byte)((instr[2]<<6)^instr[3]);

}

else

{

outstr[2]=0;

}

outMessage.Add(outstr[0]);

if(outstr[1]!=0)

outMessage.Add(outstr[1]);

if(outstr[2]!=0)

outMessage.Add(outstr[2]);

}

byte[]outbyte=(byte[])outMessage.ToArray(Type.GetType("System.Byte"));

returnSystem.Text.Encoding.Default.GetString(outbyte);

}

直接使用.NET中的的库类函数

方法二:

///<summary>

///Base64加密

///</summary>

///<paramname="Message"></param>

///<returns></returns>

publicstringBase64Code(stringMessage)

{

byte[]bytes=Encoding.Default.GetBytes(Message);

returnConvert.ToBase64String(bytes);

}

///<summary>

///Base64解密

///</summary>

///<paramname="Message"></param>

///<returns></returns>

publicstringBase64Decode(stringMessage)

{

byte[]bytes=Convert.FromBase64String(Message);

returnEncoding.Default.GetString(bytes);

}

参考 (1)

C# 的base64加密的类。可以用于把post改为get传递数据

时间: 2024-10-11 05:47:13

C# 的base64加密的类。可以用于把post改为get传递数据的相关文章

Java MD5,base64,AES加密工具类

import java.io.UnsupportedEncodingException; import java.math.BigInteger; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.security.SecureRandom; import java.util.regex.Matcher; import java.util.regex.Pat

C#实现基于Base64的加密解密类实例

本文实例讲述了C#实现基于Base64的加密解密类.分享给大家供大家参考.具体如下: 这个C#类是一个基于Base64的加密和解密类,用户可以可以使用默认的秘钥进行加密.解密,也可以自己设定秘钥进行加密和解密,非常实用 using System; using System.Security.Cryptography; using System.Text; namespace DotNet.Utilities { /// <summary> /// Encrypt 的摘要说明. /// <

java工具类 文件zip压缩 base64 加密,base64解密 zip解压

package com.cfam.utils; import java.io.BufferedOutputStream; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException;

Base64加密解密原理以及代码实现(VC++)

Base64加密解密原理以及代码实现 转自:http://blog.csdn.net/jacky_dai/article/details/4698461 1. Base64使用A--Z,a--z,0--9,+,/ 这64个字符.    2. 编码原理:将3个字节转换成4个字节( (3 X 8) = 24 = (4 X 6) )先读入3个字节,每读一个字节,左移8位,再右移四次,每次6位,这样就有4个字节了.    3. 解码原理:将4个字节转换成3个字节.先读入4个6位(用或运算),每次左移6位

什么是Base64加密?为什么要有Base64加密?

产生这篇文章的动力在于对接腾讯云服务的时候每次都要进行Base64编码之后才能进行签名,之前只知道Base64是个算法,但是不知道为啥都用这个算法,这次为了链接Base64究竟是个什么东东才在网络上各种找资料,把觉得对自己有用的记录下来了. 摘抄网络上便于理解的概念: 基本概念和应用场景 Base64是一种基于64个可打印字符来表示二进制数据的表示方法.由于2的6次方等于64,所以每6个比特为一个单元,对应某个可打印字符.三个字节有24个比特,对应于4个Base64单元,即3个字节需要用4个可打

iOS base64加密解密

本文转载至 http://jingyan.baidu.com/article/93f9803fff45c9e0e46f5596.html 从参考资料的地址中下载GTMBase64.zip库文件包,并解压,获得GTMBase64.h,GTMBase64.m和GTMDefines.h三个文件. 将解压得到的三个文件,添加到项目中. 新建一个base64的类,在base64.h中天假四个函数: + (NSString*)encodeBase64String:(NSString*)input; + (N

URL中加入BASE64加密的字符串引起的问题(java.net.MalformedURLException:Illegal character in URL)

序 昨天在做一个 Demo 的时候,由于是调用第三方的接口,采用的是 HTTP 的通信协议,按照文档上的说明,需要把参数进行加密后加入到 URL 中,但是,就是这个看似普普通通的操作,却让我着实费了很大的劲. 背景 关于 BASE64,我不想说太多,因为这是很基本的一种编码方式,或者说是加密方式.不了解的可以到我前面的博客中去看看,关于加密,前边有一个系列的文章.下面说说出现这个问题的情景. 昨天拿到一个任务,写一个 Demo,目的是查询一系列的信息,当然,需要调用一个第三方的接口,根据接口文档

Java AES 加密工具类

package com.microwisdom.utils; import java.security.NoSuchAlgorithmException; import java.security.SecureRandom; import java.util.logging.Level; import java.util.logging.Logger; import javax.crypto.Cipher; import javax.crypto.KeyGenerator; import jav

加密工具类 - CryptoUtils.java

加密工具类,包含MD5,BASE64,SHA,CRC32的加密与解密方法. 源码如下:(点击下载  - CryptoUtils.java.commons-io-2.4.jar.commons-codec-1.9.jar ) import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java