当前位置: 首页 > 编程日记 > 正文

提供一个基于.NET的加密/解密算法

提供一个基于.NET SymmetricAlgorithm 类的、带私钥的加密/解密算法的包装类。使用方法:

symmcrypto de = new SymmCrypto(SymmCrypto.SymmProvEnum.DES);
Response.Write(x.Decrypting(de.Encrypting("ok","yyy"),"yyy"));

类的实现c#编码

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

namespace eMeng
{
  /// <summary>
  /// SymmCrypto 的摘要说明。
  /// SymmCrypto类实现.NET框架下的加密和解密服务。
  /// 原作者: Frank Fang : fangfrank@hotmail.com
  /// </summary>
  public class SymmCrypto
  {
      public enum SymmProvEnum : int
      {
        DES, RC2, Rijndael
      }

private SymmetricAlgorithm mobjCryptoService;

/// <remarks>
    /// 使用.Net SymmetricAlgorithm 类的构造器.
    /// </remarks>
    public SymmCrypto(SymmProvEnum NetSelected)
    {
      switch (NetSelected)
      {
        case SymmProvEnum.DES:
          mobjCryptoService = new DESCryptoServiceProvider();
          break;
        case SymmProvEnum.RC2:
          mobjCryptoService = new RC2CryptoServiceProvider();
          break;
        case SymmProvEnum.Rijndael:
          mobjCryptoService = new RijndaelManaged();
          break;
      }
    }

/// <remarks>
    /// 使用自定义SymmetricAlgorithm类的构造器.
    /// </remarks>
    public SymmCrypto(SymmetricAlgorithm ServiceProvider)
    {
      mobjCryptoService = ServiceProvider;
    }

/// <remarks>
    /// Depending on the legal key size limitations of 
    /// a specific CryptoService provider and length of 
    /// the private key provided, padding the secret key 
    /// with space character to meet the legal size of the algorithm.
    /// </remarks>
    private byte[] GetLegalKey(string Key)
    {
      string sTemp;
      if (mobjCryptoService.LegalKeySizes.Length > 0)
      {
        int lessSize = 0, moreSize = mobjCryptoService.LegalKeySizes[0].MinSize;
        // key sizes are in bits
        while (Key.Length * 8 > moreSize)
        {
          lessSize = moreSize;
          moreSize += mobjCryptoService.LegalKeySizes[0].SkipSize;
        }
        sTemp = Key.PadRight(moreSize / 8, ' ');
      }
      else
        sTemp = Key;

// convert the secret key to byte array
      return ASCIIEncoding.ASCII.GetBytes(sTemp);
    }

public string Encrypting(string Source, string Key)
    {
      byte[] bytIn = System.Text.ASCIIEncoding.ASCII.GetBytes(Source);
      // create a MemoryStream so that the process can be done without I/O files
      System.IO.MemoryStream ms = new System.IO.MemoryStream();

byte[] bytKey = GetLegalKey(Key);

// set the private key
      mobjCryptoService.Key = bytKey;
      mobjCryptoService.IV = bytKey;

// create an Encryptor from the Provider Service instance
      ICryptoTransform encrypto = mobjCryptoService.CreateEncryptor();

// create Crypto Stream that transforms a stream using the encryption
      CryptoStream cs = new CryptoStream(ms, encrypto, CryptoStreamMode.Write);

// write out encrypted content into MemoryStream
      cs.Write(bytIn, 0, bytIn.Length);
      cs.FlushFinalBlock();
            
      // get the output and trim the '/0' bytes
      byte[] bytOut = ms.GetBuffer();
      int i = 0;
      for (i = 0; i < bytOut.Length; i++)
        if (bytOut[i] == 0)
          break;
                    
      // convert into Base64 so that the result can be used in xml
      return System.Convert.ToBase64String(bytOut, 0, i);
    }

public string Decrypting(string Source, string Key)
    {
      // convert from Base64 to binary
      byte[] bytIn = System.Convert.FromBase64String(Source);
      // create a MemoryStream with the input
      System.IO.MemoryStream ms = new System.IO.MemoryStream(bytIn, 0, bytIn.Length);

byte[] bytKey = GetLegalKey(Key);

// set the private key
      mobjCryptoService.Key = bytKey;
      mobjCryptoService.IV = bytKey;

// create a Decryptor from the Provider Service instance
      ICryptoTransform encrypto = mobjCryptoService.CreateDecryptor();
 
      // create Crypto Stream that transforms a stream using the decryption
      CryptoStream cs = new CryptoStream(ms, encrypto, CryptoStreamMode.Read);

// read out the result from the Crypto Stream
      System.IO.StreamReader sr = new System.IO.StreamReader( cs );
      return sr.ReadToEnd();
    }
  }
}

相关文章:

ubuntu修改IP

一、使用命令设置Ubuntu的ip地址1. 设置IP sudo ifconfig eth0 203.171.239.155 netmask 255.255.255.224 这样就算设置好了网卡eth0的IP地址和子网掩码2. 设置网关 sudo route add default gw 203.171.239.1293. 设置DNS 修改/etc/resolv.conf&#xff0c;在其中加入 nameserv…

Arm 十年重磅发布 v9 架构,不受 EAR 约束,未来将覆盖 3000 亿颗芯片

整理 | 伍杏玲出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;随着 AI、大数据、IoT 技术的相互渗透&#xff0c;人们对数据的要求也越来越高&#xff0c;如何提供普适专用、安全而强大的处理能力的架构&#xff1f;Arm 为这个答案准备十年。近日&#xff0c;Arm 推出…

HDU 6051 - If the starlight never fade | 2017 Multi-University Training Contest 2

/* HDU 6051 - If the starlight never fade [ 原根,欧拉函数 ] | 2017 Multi-University Training Contest 2 题意&#xff1a;给定 m,p, p 是素数设 f(i) 是 满足 (xy)^i ≡ x^i mod p 的 (x,y) 对数 且 1 ≤ x ≤ p-1 , 1 ≤ y ≤ m 求 ∑[1≤i≤p-1] i*f(i)限制&#xff…

干货!用 Python 快速构建神经网络

作者 | ZackSock责编 | 欧阳姝黎头图 | 下载于视觉中国前言机器学习一直是Python的一大热门方向&#xff0c;其中由神经网络算法衍生出来的深度学习在很多方面大放光彩。那神经网络到底是个个什么东西呢&#xff1f;说到神经网络很容易让人们联想到生物学中的神经网络&#xff…

才知道百度也提供了智能DNS服务 - 加速乐

http://jiasule.baidu.com/ 智能DNS 依托百度多年积累的高精度DNS识别库&#xff0c;平均只需5秒全球DNS服务器全部生效&#xff0c;百度蜘蛛1秒生效。抗攻击、无限解析记录&#xff0c;免费支持电信、联通、移动、铁通、教育网、国外、搜索引擎等分线路解析。 极致云加速 百度…

c#中结构与类的区别

类与结构的差别如何选择结构还是类一&#xff0e;类与结构的示例比较&#xff1a;结构示例&#xff1a;public struct Person {string Name;int height;int weightpublic bool overWeight(){//implement something}}类示例&#xff1a;public class TestTime {int hours;int mi…

Samba amp; Nginx - Resource temporarily unavailable

先说说本人的开发环境&#xff1a;Win7 Editplus VMware(CentosSambaNginx)。用Samba在Centos上把web文件夹(如www)共享&#xff0c;然后在Win7上訪问这个文件夹。之所以这么用的原因有&#xff1a; 习惯了Windows。效率比較高Editplus编辑器好用&#xff0c;相对于vi系列来说…

好多Javascript日期选择器呀-7

the Coolest DHTML Calendar 最特別的在於按下月份跟年份的加減按鈕不放&#xff0c;就可以選擇該項目。但實際上按著左鍵拖曳實在是一件很累的事&#xff0c;而且不懂電腦的 End-user 根本就不知道要按著不放&#xff0c;還得特地花時間去說明真的吃力不討好。 正好這次的專案…

话AI、学实践、探未来,亚马逊云科技AI在线大会报名开启!

Innovate 2021亚马逊云科技 AI 在线大会即将在 4 月 22 日举办。届时&#xff0c;亚马逊云科技大中华区产品部总经理顾凡&#xff0c;以及亚马逊云科技全球人工智能技术副总裁、杰出科学家Alex Smola将联袂为您献上精彩的主题演讲。大会开设六大分会场&#xff0c;可谓是别开生…

linux中的一些命令的想法

用户影子文件 ----shadow为什么要有影子文件因为Linux使用不可逆的加密算法来加密口令。加密算法不可逆的&#xff0c;因此***从密文处得不到明文&#xff0c;但/etc/passwd文件是全局可读的&#xff0c;而且加密算法是公开的&#xff0c;一旦用户有机会获取了/etc/passwd文件&…

vstpd服务

1、安装ftpyum install vsftpd -y systemctl start vsftpd systemctl stop firewalld systemctl enable vsftpd setenforce 0 #关闭selinux或者设置selinux不然会对试验造成影响 lftp ip ##能登陆并且显示&#xff0c;表示安装成功2、vsftpd文件信息/var/ftp …

LINQ to XML 建立,读取,增,删,改

LINQ to XML的出现使得我们再也不需要使用XMLDocument这样复杂的一个个的没有层次感的添加和删除。LINQ可以使的生成的XML文档在内存中错落有致。下面以一个小的例子说名LINQ to XML的简单应用。 需要添加必要的引用。System.XML.Linq , System.XML.Xpath使用XDocument 建立一个…

好多Javascript日期选择器呀-6

<script languagejavascript>var DS_x,DS_y; function dateSelector() //构造dateSelector对象&#xff0c;用来实现一个日历形式的日期输入框。{ var myDatenew Date(); this.yearmyDate.getFullYear(); //定义year属性&#xff0c;年份&#xff0c;默认值为当前系…

市值达 58 亿美元,吴恩达的在线教育平台 Coursera 正式上市

整理 | 寇雪芹出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;4 月 1 日&#xff0c;教育科技公司 Coursera 在纽约证券交易所上市&#xff0c;股票代码为 COUR。该股开盘价定为 39 美元 / 股&#xff0c;截至上市当日收盘&#xff0c;股价上涨至 45 美元 / 股&#…

软件包管理RPM

RPM 程序包管理器&#xff0c;可实现对程序包的安装、更新、查询和卸载操作&#xff0c;应用广泛下面通过实际操作来更好的理解RPM的功能安装程序&#xff1a;-i //安装数据包参数-v //显示安装过程-vv //显示更详细的安装信息-h //配合-v更加直观的显示程序安装过程&#…

好多Javascript日期选择器呀-4

<Script LANGUAGE"JavaScript"> var months new Array("一", "二", "三","四", "五", "六", "七", "八", "九","十", "十一", "十二&q…

SUBSTRING函數用法

---引用---從第二位開始,取三位 select SUBSTRING([價格條件],2,3) FROM [Ame_FSC_SEBGCelERP].[dbo].[物料採購價格信息表] SELECT * FROM [Ame_FSC_SEBGCelERP].[dbo].[物料採購價格信息表] update [Ame_FSC_SEBGCelERP].[dbo].[物料採購價格信息表] set [價格條件]SUBSTRI…

英特尔发布智慧社区解决方案,全栈技术支撑,涵盖五大战略方向

疫情的发生加速了城市智能化治理进程&#xff0c;而智慧社区作为其中的重要组成部分&#xff0c;在AI、大数据等技术的助力下&#xff0c;健康防疫追踪、应急管理等需求和应用也因此得到快速发展。 一般来说&#xff0c;打造智慧社区主要有两大目标&#xff0c;一方面&#xf…

OpenGLES 关于 数学 的分支 - 线性变化量、离散量、随机量

关于 数学 的分支 - 线性变化量、离散量、随机量太阳火神的漂亮人生 (http://blog.csdn.net/opengl_es)本文遵循“署名-非商业用途-保持一致”创作公用协议转载请保留此句&#xff1a;太阳火神的漂亮人生 - 本博客专注于 敏捷开发及移动和物联设备研究&#xff1a;iOS、Androi…

好多Javascript日期选择器呀-5

<HTML> <HEAD> <TITLE>最精致的日历式日期输入控件 (Smart Ver 1.00)</TITLE> </HEAD> <style> body {font-size:12px;font-family:"Tahoma"; } td {font-size:12px;font-family:"Tahoma"; } .inputdate {border:1px…

清明出游,你会“鸽”酒店吗?AI 早已看穿一切

来源 | Hyper超神经作者 | 神经小兮头图 | 下载于视觉中国如今&#xff0c;大数据已经被各行各业所应用&#xff0c;酒店行业也不例外。充分利用大数据&#xff0c;使得酒店能够预测市场需求变化&#xff0c;进行智能化决策分析&#xff0c;改善经营状况。各大 OTA&#xff08;…

ti的硬件时钟和系统时钟同步

1.hwclock -w软到硬 hwclock -s硬到软2. 通过ntp网络时钟控制同步3.etc下的localtime文件和GMT-8转载于:https://www.cnblogs.com/pengkunfan/p/3515517.html

来看看BAT在AR领域的布局,你给打几分?

所谓的AR(增强现实)&#xff0c;就是把真实信息和虚拟世界叠加&#xff0c;并使两者具有交互性。换句话说&#xff0c;AR技术不仅让虚拟对象融入到现实世界中&#xff0c;用户还可以对现实世界做出响应。这是一种共生(symbiont)技术&#xff0c;机器与用户的共生。 而当Pokemon…

解决vim没有颜色的办法

首先打开vim&#xff0c;输入命令 scriptnames看看vim加载了哪些脚本。 :scriptnames 输出入下 1: /home/users/xxx/.vimrc2: /home/users/xxx/tools/share/vim/vim73/colors/darkblue.vim3: /home/users/xxx/tools/share/vim/vim73/syntax/syntax.vim4: /home/users/xxx/tools…

好多Javascript日期选择器呀--1

<script languagejavascript>var DS_x,DS_y; function dateSelector() //构造dateSelector对象&#xff0c;用来实现一个日历形式的日期输入框。{ var myDatenew Date(); this.yearmyDate.getFullYear(); //定义year属性&#xff0c;年份&#xff0c;默认值为当前系…

扶贫干部拍胸脯认证,AI开发者上手零门槛,百度打造 “云智一体”全栈开发杀手锏...

“我可以拍着胸脯说识别准确率很高。”扶贫干部刘乐这样评价他在使用百度EasyDL平台助力扶贫的效果&#xff0c;他是陕西省汉中市扶贫信息中心副主任&#xff0c;也是一名热爱编程的程序员。 在近期百度智能云举办的2021云智技术论坛首场活动上&#xff0c;刘乐介绍&#xff0c…

CSS3 新特性

CSS3 是最新的 CSS 标准&#xff0c;并且完全向后兼容&#xff0c;不过目前W3C 仍然在对 CSS3 规范进行开发&#xff0c;虽然标准的规范还没有正式发布&#xff0c;但是现代浏览器已经支持相当多的 CSS3 属性了。CSS3 提供了很多可以把玩的新特性&#xff0c;模糊了之前只控制样…

在.net中使用GDI+来提高gif图片的保存画质

//本文章有www.blue1000.com翻译&#xff0c;原文地址http://codebetter.com/blogs/brendan.tompkins/archive/2004/01/26/6103.aspx //尊重他人劳动成果&#xff0c;转载请注明出处。 写程序的时候经常用到gdi&#xff0c;他可以将一幅深色32 bpp图像保存为一个gif文件&…

随记:kickstart远程批量无人值守安装linux

环境&#xff1a;RHEL6.2组件&#xff1a;dhcp tftp vsftp kickstart原理&#xff1a;需安装linux的客户机通过PXE方式启动&#xff1b;通过dhcp取得IP地址&#xff1b;通过TFTP下载引导进程文件pxelinux.0&#xff0c;内核文件vmlinuz&#xff0c;底层驱动initrd.img&…

第五届全国大学生计算机系统能力培养大赛 | 赠书

全国大学生计算机系统能力培养大赛是由教育部高等学校计算机类专业教学指导委员会和系统能力培养研究专家组共同发起&#xff0c;以学科竞赛推动专业建设和计算机领域创新人才培养体系改革、培育我国高端芯片及核心系统的技术突破与产业化后备人才为目标&#xff0c;面向高校大…