热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

C#编写的Base64加密和解密类

本文给大家汇总介绍了几种C#编写的Base64加密和解密类的代码,从简单到复杂,都能够实现功能,有需要的小伙伴根据自己的项目需求参考下吧。

这个C#类是一个基于Base64的加密和解密类,用户可以可以使用默认的秘钥进行加密、解密,也可以自己设定秘钥进行加密和解密,非常实用

代码一:非常精简的代码

/// 
/// Base64加密,解密方法
/// 
/// 输入字符串
/// true-加密,false-解密
static public string base64(string s, bool c)
{
  if (c)
  {
    returnSystem.Convert.ToBase64String(System.Text.Encoding.Default.GetBytes(s));
  }
  else
  {
    try
{
  returnSystem.Text.Encoding.Default.GetString(System.Convert.FromBase64String(pwdString));
}
catch(Exception exp)
{
  returnexp.Message;
}
  }
}

代码二:

using System;
using System.Security.Cryptography; 
using System.Text;
namespace DotNet.Utilities
{
  /// 
  /// Encrypt 的摘要说明。
  /// 
  public class DEncrypt
  {
    /// 
    /// 构造方法
    /// 
    public DEncrypt() 
    { 
    }
 
    #region 使用 缺省密钥字符串 加密/解密string
 
    /// 
    /// 使用缺省密钥字符串加密string
    /// 
    /// 明文
    /// 密文
    public static string Encrypt(string original)
    {
      return Encrypt(original,"sharejs.com");
    }
    /// 
    /// 使用缺省密钥字符串解密string
    /// 
    /// 密文
    /// 明文
    public static string Decrypt(string original)
    {
      return Decrypt(original,"sharejs.com",System.Text.Encoding.Default);
    }
 
    #endregion
 
    #region 使用 给定密钥字符串 加密/解密string
    /// 
    /// 使用给定密钥字符串加密string
    /// 
    /// 原始文字
    /// 密钥
    /// 字符编码方案
    /// 密文
    public static string Encrypt(string original, string key) 
    { 
      byte[] buff = System.Text.Encoding.Default.GetBytes(original); 
      byte[] kb = System.Text.Encoding.Default.GetBytes(key);
      return Convert.ToBase64String(Encrypt(buff,kb));   
    }
    /// 
    /// 使用给定密钥字符串解密string
    /// 
    /// 密文
    /// 密钥
    /// 明文
    public static string Decrypt(string original, string key)
    {
      return Decrypt(original,key,System.Text.Encoding.Default);
    }
 
    /// 
    /// 使用给定密钥字符串解密string,返回指定编码方式明文
    /// 
    /// 密文
    /// 密钥
    /// 字符编码方案
    /// 明文
    public static string Decrypt(string encrypted, string key,Encoding encoding) 
    {   
      byte[] buff = Convert.FromBase64String(encrypted); 
      byte[] kb = System.Text.Encoding.Default.GetBytes(key);
      return encoding.GetString(Decrypt(buff,kb));   
    } 
    #endregion
 
    #region 使用 缺省密钥字符串 加密/解密/byte[]
    /// 
    /// 使用缺省密钥字符串解密byte[]
    /// 
    /// 密文
    /// 密钥
    /// 明文
    public static byte[] Decrypt(byte[] encrypted) 
    { 
      byte[] key = System.Text.Encoding.Default.GetBytes("sharejs.com");
      return Decrypt(encrypted,key);  
    }
    /// 
    /// 使用缺省密钥字符串加密
    /// 
    /// 原始数据
    /// 密钥
    /// 密文
    public static byte[] Encrypt(byte[] original) 
    { 
      byte[] key = System.Text.Encoding.Default.GetBytes("sharejs.com");
      return Encrypt(original,key);  
    } 
    #endregion

    #region 使用 给定密钥 加密/解密/byte[]
 
    /// 
    /// 生成MD5摘要
    /// 
    /// 数据源
    /// 摘要
    public static byte[] MakeMD5(byte[] original)
    {
      MD5CryptoServiceProvider hashmd5 = new MD5CryptoServiceProvider(); 
      byte[] keyhash = hashmd5.ComputeHash(original);   
      hashmd5 = null; 
      return keyhash;
    }

    /// 
    /// 使用给定密钥加密
    /// 
    /// 明文
    /// 密钥
    /// 密文
    public static byte[] Encrypt(byte[] original, byte[] key) 
    { 
      TripleDESCryptoServiceProvider des = new TripleDESCryptoServiceProvider();   
      des.Key = MakeMD5(key);
      des.Mode = CipherMode.ECB; 
   
      return des.CreateEncryptor().TransformFinalBlock(original, 0, original.Length);  
    } 
 
    /// 
    /// 使用给定密钥解密数据
    /// 
    /// 密文
    /// 密钥
    /// 明文
    public static byte[] Decrypt(byte[] encrypted, byte[] key) 
    { 
      TripleDESCryptoServiceProvider des = new TripleDESCryptoServiceProvider(); 
      des.Key = MakeMD5(key);  
      des.Mode = CipherMode.ECB; 
 
      return des.CreateDecryptor().TransformFinalBlock(encrypted, 0, encrypted.Length);
    } 
  
    #endregion

  }
}

代码三:

using System; 
using System.Collections.Generic; 
using System.Text; 
 
namespace MyLibs.encrypt 
{ 
  public class Base64 
  { 
    private static string base64EncodeChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";//编码后的字符集 
    private static int[] base64DecodeChars = new int[] { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 62, -1, -1, -1, 63, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, -1, -1, -1, -1, -1, -1, -1, 0, 1, 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, -1, -1, -1, -1, -1, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, -1, -1, -1, -1, -1 };//对应ASICC字符的位置 
    public static string base64encode(string str) 
    { //加密 
      string Out = ""; 
      int i = 0, len = str.Length; 
      char c1, c2, c3; 
      while (i > 2]; 
          Out += base64EncodeChars[(c1 & 0x3) <<4]; 
          Out += "=="; 
          break; 
        } 
        c2 = str[i++]; 
        if (i == len) 
        { 
          Out += base64EncodeChars[c1 >> 2]; 
          Out += base64EncodeChars[((c1 & 0x3) <<4) | ((c2 & 0xF0) >> 4)]; 
          Out += base64EncodeChars[(c2 & 0xF) <<2]; 
          Out += "="; 
          break; 
        } 
        c3 = str[i++]; 
        Out += base64EncodeChars[c1 >> 2]; 
        Out += base64EncodeChars[((c1 & 0x3) <<4) | ((c2 & 0xF0) >> 4)]; 
        Out += base64EncodeChars[((c2 & 0xF) <<2) | ((c3 & 0xC0) >> 6)]; 
        Out += base64EncodeChars[c3 & 0x3F]; 
      } 
      return Out; 
    } 
    public string utf16to8(string str) 
    { 
      string Out = ""; 
      int i, len; 
      char c;//char为16位Unicode字符,范围0~0xffff,感谢vczh提醒 
      len = str.Length; 
      for (i = 0; i = 0x0001) && (c <= 0x007F)) 
        { 
          Out += str[i]; 
        } 
        else if (c > 0x07FF) 
        { 
          Out += (char)(0xE0 | ((c >> 12) & 0x0F)); 
          Out += (char)(0x80 | ((c >> 6) & 0x3F)); 
          Out += (char)(0x80 | ((c >> 0) & 0x3F)); 
        } 
        else 
        { 
          Out += (char)(0xC0 | ((c >> 6) & 0x1F)); 
          Out += (char)(0x80 | ((c >> 0) & 0x3F)); 
        } 
      } 
      return Out; 
    } 
 
    public static string base64decode(string str) 
    {//解密 
      int c1, c2, c3, c4; 
      int i, len; 
      string Out; 
      len = str.Length; 
      i = 0; Out = ""; 
      while (i > 4)); 
        do 
        { 
          c3 = str[i++] & 0xff; 
          if (c3 == 61) return Out; 
          c3 = base64DecodeChars[c3]; 
        } while (i > 2)); 
        do 
        { 
          c4 = str[i++] & 0xff; 
          if (c4 == 61) return Out; 
          c4 = base64DecodeChars[c4]; 
        } while (i > 4) 
        { 
          case 0: 
          case 1: 
          case 2: 
          case 3: 
          case 4: 
          case 5: 
          case 6: 
          case 7: Out += str[i - 1]; break; 
          case 12: 
          case 13: char2 = str[i++]; 
            Out += (char)(((c & 0x1F) <<6) | (char2 & 0x3F)); break; 
          case 14: char2 = str[i++]; 
            char3 = str[i++]; 
            Out += (char)(((c & 0x0F) <<12) | ((char2 & 0x3F) <<6) | ((char3 & 0x3F) <<0)); break; 
        } 
      } 
      return Out; 
    } 
 
  } 
} 

以上所述就是本文的全部内容了,希望大家能够喜欢。


推荐阅读
  • 本文介绍了C#中数据集DataSet对象的使用及相关方法详解,包括DataSet对象的概述、与数据关系对象的互联、Rows集合和Columns集合的组成,以及DataSet对象常用的方法之一——Merge方法的使用。通过本文的阅读,读者可以了解到DataSet对象在C#中的重要性和使用方法。 ... [详细]
  • C# 7.0 新特性:基于Tuple的“多”返回值方法
    本文介绍了C# 7.0中基于Tuple的“多”返回值方法的使用。通过对C# 6.0及更早版本的做法进行回顾,提出了问题:如何使一个方法可返回多个返回值。然后详细介绍了C# 7.0中使用Tuple的写法,并给出了示例代码。最后,总结了该新特性的优点。 ... [详细]
  • 摘要: 在测试数据中,生成中文姓名是一个常见的需求。本文介绍了使用C#编写的随机生成中文姓名的方法,并分享了相关代码。作者欢迎读者提出意见和建议。 ... [详细]
  • 本文介绍了如何使用C#制作Java+Mysql+Tomcat环境安装程序,实现一键式安装。通过将JDK、Mysql、Tomcat三者制作成一个安装包,解决了客户在安装软件时的复杂配置和繁琐问题,便于管理软件版本和系统集成。具体步骤包括配置JDK环境变量和安装Mysql服务,其中使用了MySQL Server 5.5社区版和my.ini文件。安装方法为通过命令行将目录转到mysql的bin目录下,执行mysqld --install MySQL5命令。 ... [详细]
  • 导出功能protectedvoidbtnExport(objectsender,EventArgse){用来打开下载窗口stringfileName中 ... [详细]
  • Oracle优化新常态的五大禁止及其性能隐患
    本文介绍了Oracle优化新常态中的五大禁止措施,包括禁止外键、禁止视图、禁止触发器、禁止存储过程和禁止JOB,并分析了这些禁止措施可能带来的性能隐患。文章还讨论了这些禁止措施在C/S架构和B/S架构中的不同应用情况,并提出了解决方案。 ... [详细]
  • 本文是关于C#类型系统、值类型和引用类型的概念性笔记。介绍了C#1系统类型的三个特性,静态类型的含义,显式类型和隐式类型的区别。还讨论了类、结构、数组类型、枚举、委托类型和接口类型属于哪一种类型。同时纠正了关于结构、引用类型和对象传递的错误表述。最后提到了C#4中使用动态类型的关键字。 ... [详细]
  • HTML5网页模板怎么加百度统计?
    本文介绍了如何在HTML5网页模板中加入百度统计,并对模板文件、css样式表、js插件库等内容进行了说明。同时还解答了关于HTML5网页模板的使用方法、表单提交、域名和空间的问题,并介绍了如何使用Visual Studio 2010创建HTML5模板。此外,还提到了使用Jquery编写美好的HTML5前端框架模板的方法,以及制作企业HTML5网站模板和支持HTML5的CMS。 ... [详细]
  • JavaScript简介及语言特点
    本文介绍了JavaScript的起源和发展历程,以及其在前端验证和服务器端开发中的应用。同时,还介绍了ECMAScript标准、DOM对象和BOM对象的作用及特点。最后,对JavaScript作为解释型语言和编译型语言的区别进行了说明。 ... [详细]
  • 本文整理了315道Python基础题目及答案,帮助读者检验学习成果。文章介绍了学习Python的途径、Python与其他编程语言的对比、解释型和编译型编程语言的简述、Python解释器的种类和特点、位和字节的关系、以及至少5个PEP8规范。对于想要检验自己学习成果的读者,这些题目将是一个不错的选择。请注意,答案在视频中,本文不提供答案。 ... [详细]
  • 本文详细介绍了使用C#实现Word模版打印的方案。包括添加COM引用、新建Word操作类、开启Word进程、加载模版文件等步骤。通过该方案可以实现C#对Word文档的打印功能。 ... [详细]
  • 本文介绍了C#中快速生成随机整数的方法。默认的Random类构造函数使用时间作为种子,会生成许多重复的随机数。文章探讨了是否有更快的方案,并讨论了随机数可以出现重复的情况。 ... [详细]
  • 在C#中,使用关键字abstract来定义抽象类和抽象方法。抽象类是一种不能被实例化的类,它只提供部分实现,但可以被其他类继承并创建实例。抽象类可以用于类、方法、属性、索引器和事件。在一个类声明中使用abstract表示该类倾向于作为其他类的基类成员被标识为抽象,或者被包含在一个抽象类中,必须由其派生类实现。本文介绍了C#中抽象类和抽象方法的基础知识,并提供了一个示例代码。 ... [详细]
  • 在C#/ .NET中,处理基督面前的日期没有内置支持,需要编写自己的代码。本文介绍了在处理此类日期时的最佳方法,并提供了一个示例链接,可以参考编码的解决方案。 ... [详细]
  • Unity3D引擎的体系结构和功能详解
    本文详细介绍了Unity3D引擎的体系结构和功能。Unity3D是一个屡获殊荣的工具,用于创建交互式3D应用程序。它由游戏引擎和编辑器组成,支持C#、Boo和JavaScript脚本编程。该引擎涵盖了声音、图形、物理和网络功能等主题。Unity编辑器具有多语言脚本编辑器和预制装配系统等特点。本文还介绍了Unity的许可证情况。Unity基本功能有限的免费,适用于PC、MAC和Web开发。其他平台或完整的功能集需要购买许可证。 ... [详细]
author-avatar
小賑賑_533
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有