AES,Base64加密,解密

using System.IO;
using System.Security.Cryptography;
using System.Text;
using UnityEngine;

namespace Web.Networking
{

/// <summary>
/// AES + Base64 双重加密。
/// </summary>
public class AesBase64Encrypt
{
static bool enable = false;
/// <summary>
/// AES加密所使用的密钥,需要与服务端一致。
/// </summary>
private static string private_key = "S46ZT_UHY*U3HVLC";

/// <summary>
/// 使用特定的配置创建AES加密实例,需要保持Mode、Padding、IV与服务端一致。
/// </summary>
/// <returns>The aes.</returns>
static Aes CreateAes()
{
byte[] key = Encoding.ASCII.GetBytes(private_key);
Aes aes = Aes.Create();
aes.Mode = CipherMode.CBC;
aes.Padding = PaddingMode.Zeros;
aes.Key = key;
aes.IV = key;
return aes;
}

/// <summary>
/// 加密字符串
/// </summary>
/// <param name="toEncrypt">待加密的字符串</param>
public static string Encrypt(string toEncrypt)
{
if (!enable)
{
return toEncrypt;
}
Aes aes = CreateAes();
ICryptoTransform cTransform = aes.CreateEncryptor();
byte[] sourceData = Encoding.UTF8.GetBytes(toEncrypt);
byte[] cryptData = cTransform.TransformFinalBlock(sourceData, 0, sourceData.Length);
string cryptString = System.Convert.ToBase64String(cryptData);
return cryptString;
}
/// <summary>
/// 移除开头与结尾的双引号
/// </summary>
/// <param name="str"></param>
/// <returns></returns>
static string RemoveInvalidQuotes(string str)
{
str = str.TrimStart(‘"‘).TrimEnd(‘"‘);
return str;

}

/// <summary>
/// 移除末尾的 NULL 字符
/// </summary>
/// <returns></returns>
/// <param name="str"></param>
static string RemoveInvalidNulls(string str)
{
str = str.TrimEnd(‘\0‘);
return str;
}

/// <summary>
/// 解密字符串
/// </summary>
/// <param name="toDecrypt">待解密的字符串</param>
public static string Decrypt(string toDecrypt)
{
if (!enable)
{
return toDecrypt;
}
// 服务端返回格式需要预处理
// 移除多余的双引号
toDecrypt = RemoveInvalidQuotes(toDecrypt);
Aes aes = CreateAes();
ICryptoTransform cTransform = aes.CreateDecryptor();
byte[] encryptedData = System.Convert.FromBase64String(toDecrypt);
byte[] originalSourceData = cTransform.TransformFinalBlock(encryptedData, 0, encryptedData.Length);
string originalString = Encoding.UTF8.GetString(originalSourceData);
// 解密后会有多余的NULL字符在末尾,需要移除
originalString = RemoveInvalidNulls(originalString);
return originalString;
}

}
}

时间: 2024-08-29 18:28:14

AES,Base64加密,解密的相关文章

DES对称加解密、AES RijndaelManaged加解密、Base64加密解密、MD5加密等操作辅助类 EncodeHelper

/// <summary> /// 使用默认加密 /// </summary> /// <param name="strText"></param> /// <returns></returns> public static string DesEncrypt(string strText) /// <summary> /// 使用默认解密 /// </summary> /// <pa

Java android DES+Base64加密解密

服务器与客户端加密解密传输, 中间遇到各种坑,客户端无论用AES还是DES解密时都会出现错误,后来才看到好多人说要用AES/DES加完密后还要BASE64加密,照做时发现android和java的Base64加密解密不一致,只好不使用java或android的Base64重新在网上找了一个,感谢以下两位提供的代码,两段分别转载自以下博客. https://www.cnblogs.com/xuhaiqing/archive/2013/03/12/2955837.html https://www.c

c#中base64加密解密

using System; using System.Text; namespace Common { /// <summary> /// 实现Base64加密解密 /// </summary> public sealed class Base64 { /// <summary> /// Base64加密 /// </summary> /// <param name="codeName">加密采用的编码方式</param

Base64 URL image CSS &amp; 在线base64 加密/解密 link: $ svg path 线宽:stroke-width

Base64 URL image CSSData URI scheme是在RFC2397中定义的svg path 线宽:stroke-width 在线base64 加密/解密 link: 那么这是什么呢?这是Data URI scheme. Data URI scheme是在RFC2397中定义的,目的是将一些小的数据,直接嵌入到网页中,从而不用再从外部文件载入.比如上面那串字符,其实是一张小图片,将这些字符复制黏贴到火狐的地址栏中并转到,就能看到它了,一张1X36的白灰png图片. 在上面的D

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

【代码笔记】3DES+Base64加密解密

一,工程目录. 二,代码. RootViewController.m #import "RootViewController.h" #import "NSString+TripleDES.h" #import "GTMBase64.h" @interface RootViewController () @end @implementation RootViewController - (id)initWithNibName:(NSString *

javaScript base64算法的实现 与 java中的base64 加密 解密

前段时间,工作需要,需要用js和java配套的base64算法,奈何没找到,然后网上抄一套.用起来还是很有效的. 闲言少絮,直接上干货. js 版base 64 算法  base64.js var keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; //将Ansi编码的字符串进行Base64编码 function encode64(input) { var output = &quo

实现Base64加密解密

using System;using System.Text; namespace Common{/// <summary>/// 实现Base64加密解密/// </summary>public sealed class Base64{/// <summary>/// Base64加密/// </summary>/// <param name="codeName">加密采用的编码方式</param>/// <

Base64加密解密

/// <summary> /// 实现Base64加密解密 /// </summary> public sealed class Base64 { /// <summary> /// Base64加密 /// </summary> /// <param name="codeName">加密采用的编码方式</param> /// <param name="source">待加密的明文

JS实现base64加密解密

JS实现base64加密解密 转载自http://blog.csdn.net/fengzheng0306/archive/2006/04/25/676055.aspx 方法一: <HTML><HEAD><TITLE>Base64</TITLE><script language=javascript>var base64EncodeChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrs