c#做的一个加密解密的类.pdf

  1. 1、本文档共12页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
两年写的东西,现在整理一下发出来!以前公司需要做 WebService,并且对WebService 的 SoapHeader 进行加密,所以就写了这么个东东!使用这个类,需要密钥管理!为了保证数据 的安全性往往要对数据进行加密,但是加密的缺点之一,就是影响程序的运行效率,所以, 当时我的思路是只对用户的登录信息(用户名,密码)进行加密!数据用明文传输,用户信 息验证没有通过的情况下, 不进行数据传输。 实际在网络通讯中,使用密钥匙的方式并非无懈可击,如果黑客可以捕捉到用密钥加密的, 用户验证信息,然后,做个模拟请求,向提供 WebService 的服务器发请求,还是可以获得请 求数据!所以,我又使用了 IP 或者域名绑定的方式!毕竟,WebService 不是直接对最终用 户提供的!所以,加上以上这些手段后,就算有不良企图者想通过非法方式获得 WebService 提供的服务,就再费点劲吧! 还有一点安全建议,就是定期的更换密钥,在这个例子中,我用的是对称加密,加密方和解 密方的密钥一致!定期的更换密钥可以让安全性提高一大截! 大家要有更好的方法,或者建议,可以留言讨论一下!共同提高! 代码如下: using System; using System.Security.Cryptography ; using System.Text; using System.IO; namespace SEDO { /// <summary> /// SEDO 的摘要说明。 /// SEDO 实现的是用一个封装了 4 种对称加密方法 (Des,Rc2,Rijndael,TripleDes)的组件 /// /// 注意事项: /// 1:TripleDes 和 Rijndael 加密/解密对象使用 16 或者 24 位 byte 的Key /// 2:Rijndael 只能使用 16 位的初始化向量 IV /// 3:Des 和 Rc2 均使用 8 位 Byte 的Key 和 IV /// 4:对需要加密/解密的数据流采用何种方法进行编码/解码,由调用组件的用户自己决定 /// 5:密钥和初始化向量 IV 由使用者自己定义 /// 程序员: 王海波 2003-05-19 hwnanghb@21 /// </summary> //定义加密类型的枚举 public enum EncryptionAlgorithm {Des = 1, Rc2, Rijndael, TripleDes}; //定义加密类 internal class EncryptTransformer { private EncryptionAlgorithm algorithmID; private byte[] initVec; private byte[] encKey; internal EncryptTransformer(EncryptionAlgorithm algId) { //Save the algorithm being used. algorithmID = algId; } internal ICryptoTransform GetCryptoServiceProvider(byte[] bytesKey) { //当数据密钥 Key 或者初始化向量 IV 为空的时候,将使用加密对象自动产生的密钥 Key 或者 初始化向量 IV switch (algorithmID) { case EncryptionAlgorithm.Des: { DES des = new DESCryptoServiceProvider(); des.Mode = CipherMode.CBC; // See if a key was provided if (null == bytesKey) { encKey = des.Key; } else { des.Key = bytesKey; encKey = des.Key; } // See if the client provided an initialization vector if (null == initVec) { // Have the algorithm create one initVec = des.IV; } else { //No, give it to the algorithm des.IV = initVec; } return des.CreateEncryptor(); } case EncryptionAlgorithm.Triple

文档评论(0)

152****7770 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档