最近因为要做一个加密的功能,简单了解了一下加密算法,现在比较常用的有三个加密算法MD5加密算法、RSA加密算法、DES加密算法。

 

    MD5加密算法

    定义:MD5算法是将任意长度的“字节串”变换成一个128bit的大整数,并且它是一个不可逆的字符串变换算法,即使你看到源程序和算法描述,也无法将MD5的值变回原始的字符串。

    应用:在有些操作系统中,用户的密码是以MD5的方式保存的,用户登录时,系统吧用户输入的密码计算成MD5中,然后和数据库中保存的MD5值进行比较,如果相同则登录成功,如果不同则登录失败,而系统并不知道用户的密码是什么。

 

    RSA加密算法

    定义:RSA既能用于数据加密,也能用于数字签名。

    原理:1、找出三个数p、q、r    p、q是相异的中质数, r 是与 (p-1)(q-1) 互质的数,p, q, r 这三个数便是 private key

                2、找出 m, 使得 rm = 1 mod (p-1)(q-1)计算 n = pq  m, n 这两个数便是 public key 

           3、a是要加密的资料, b = a^m mod n, (0 <= b < n),b是加密后的资料

           4、 解密过程 a = b^r mod pq (0 <= c < pq)

    局限性:由于进行的都是大数计算,速度一直是RSA的缺陷。一般来说只用于少量数据加密。 

 

    DES加密算法

    有点:DES密码体制的安全性应该不依赖于算法的保密,其安全性仅以加密密钥的保密为基础(动态的生成key)

   原理:DES算法有三个参数:Key、Data、Mode。其中Key为8个字节共64位,是DES算法的工作密钥;Data也为8个字节64位,是要被加密或被解密的数据;Mode为DES的工作方式,有两种:加密或解密。 如Mode为加密,则用Key 去把数据Data进行加密, 生成Data的密码形式(64位)作为DES的输出结果;如Mode为解密,则用Key去把密码形式的数据Data解密,还原为Data的明码形式(64位)作为DES的输出结果。

    应用:我们最后使用的就是DES加密算法,但是由于用户对数据的保密性并没有高度的要求,所以我们没有使用动态的key,而是使用了静态的key.

    加密程序

  1. Dim des As New System.Security.Cryptography.DESCryptoServiceProvider 'DES算法
  2. Dim inputByteArray As Byte()
  3. inputByteArray = System.Text.Encoding.Default.GetBytes(SourceStr)
  4. des.Key = System.Text.Encoding.UTF8.GetBytes(myKey) 'myKey DES用8个字符,TripleDES要24个字符
  5. des.IV = System.Text.Encoding.UTF8.GetBytes(myIV) 'myIV DES用8个字符,TripleDES要24个字符
  6. Dim ms As New System.IO.MemoryStream
  7. Dim cs As New System.Security.Cryptography.CryptoStream(ms, des.CreateEncryptor(), System.Security.Cryp            tography.CryptoStreamMode.Write)
  8. Dim sw As New System.IO.StreamWriter(cs)
  9. sw.Write(SourceStr)
  10. sw.Flush()
  11. cs.FlushFinalBlock()
  12. ms.Flush()
  13. EncryptDes = Convert.ToBase64String(ms.GetBuffer(), 0, ms.Length)

    调用

  1. EDes = EncryptDes(DataData(j, k).Value, "12345678", "abcdefgh")

    解密

  1. <span style="font-size:18px;"><strong>        Dim des As New System.Security.Cryptography.DESCryptoServiceProvider 'DES算法
  2. des.Key = System.Text.Encoding.UTF8.GetBytes(myKey) 'myKey DES用8个字符,TripleDES要24个字符
  3. des.IV = System.Text.Encoding.UTF8.GetBytes(myIV) 'myIV DES用8个字符,TripleDES要24个字符
  4. Dim buffer As Byte() = Convert.FromBase64String(SourceStr)
  5. Dim ms As New System.IO.MemoryStream(buffer)
  6. Dim cs As New System.Security.Cryptography.CryptoStream(ms, des.CreateDecryptor(), System.Security.Cryptography.CryptoStreamMode.Read)
  7. Dim sr As New System.IO.StreamReader(cs)
  8. DecryptDes = sr.ReadToEnd()</strong></span>

 

    调用

  1. <span style="font-size:18px;"><strong>        UserEntity.userId = DecryptDes(mydataset.Tables(0).Rows(Count).Item(0), "12345678", "abcdefgh")
  2. UserEntity.userName = DecryptDes(mydataset.Tables(0).Rows(Count).Item(1), "12345678", "abcdefgh")
  3. UserEntity.passWord = DecryptDes(mydataset.Tables(0).Rows(Count).Item(2), "12345678", "abcdefgh")
  4. UserEntity.realyName = DecryptDes(mydataset.Tables(0).Rows(Count).Item(3), "12345678", "abcdefgh")
  5. UserEntity.phoneNumber = DecryptDes(mydataset.Tables(0).Rows(Count).Item(4), "12345678", "abcdefgh")
  6. UserEntity.unitName = DecryptDes(mydataset.Tables(0).Rows(Count).Item(5), "12345678", "abcdefgh")
  7. UserEntity.unitType = DecryptDes(mydataset.Tables(0).Rows(Count).Item(6), "12345678", "abcdefgh")
  8. UserEntity.isDelete = DecryptDes(mydataset.Tables(0).Rows(Count).Item(7), "12345678", "abcdefgh")</strong></span>

 

    这里,我们只是对这三个算法的简单了解,这三个算法涉及的内容是非常多的,有不对的地方请大牛们多多斧正。

加密算法—MD5、RSA、DES的更多相关文章

  1. 【编程开发】加密算法(MD5,RSA,DES)的解析

    MD5的全称是Message-Digest Algorithm 5,在90年代初由MIT的计算机科学实验室和RSA Data Security Inc发明,经MD2.MD3和MD4发展而来. MD5将 ...

  2. 3个著名加密算法(MD5、RSA、DES)的解析

    MD5的全称是Message-Digest Algorithm 5,在90年代初由MIT的计算机科学实验室和RSA Data Security Inc发明,经MD2.MD3和MD4发展而来.    M ...

  3. [转]3个著名加密算法(MD5、RSA、DES)的解析

    MD5的全称是Message-Digest Algorithm 5,在90年代初由MIT的计算机科学实验室和RSA Data Security Inc发明,经MD2.MD3和MD4发展而来.     ...

  4. Java 加密解密 对称加密算法 非对称加密算法 MD5 BASE64 AES RSA

    版权声明:本文为博主原创文章,未经博主允许不得转载. [前言] 本文简单的介绍了加密技术相关概念,最后总结了java中现有的加密技术以及使用方法和例子 [最简单的加密] 1.简单的概念 明文:加密前的 ...

  5. Java加密技术(一)——BASE64与单向加密算法MD5&SHA&MAC

    Java加密技术(一)——BASE64与单向加密算法MD5&SHA&MAC 博客分类: Java/Security Javabase64macmd5sha     加密解密,曾经是我一 ...

  6. BASE64与单向加密算法MD5&SHA&MAC

    言归正传,这里我们主要描述Java已经实现的一些加密解密算法,最后介绍数字证书.     如基本的单向加密算法: BASE64 严格地说,属于编码格式,而非加密算法 MD5(Message Diges ...

  7. 温故知新,.Net Core遇见Digital Signature(MD5/RSA/SM),微服务签名机制设计

    什么是数字签名(Digital Signature) 数字签名(Digital Signature)是只有信息的发送者才能产生的别人无法伪造的一段数字串,这段数字串同时也是对信息的发送者发送信息真实性 ...

  8. 【Java】聊聊常用的非对称加密算法之一RSA的使用(Java)

    参考的优秀文章 Java加密技术(四)——非对称加密算法RSA RSA算法原理(一).RSA算法原理(二) RSA的公钥和私钥到底哪个才是用来加密和哪个用来解密? 简单的介绍 RSA是有名的非对称加密 ...

  9. 常用加密算法的Java实现(一) ——单向加密算法MD5和SHA

    1.Java的安全体系架构 1.1           Java的安全体系架构介绍 Java中为安全框架提供类和接口.JDK 安全 API 是 Java 编程语言的核心 API,位于 java.sec ...

随机推荐

  1. INNO 补丁制作技术, 打开 INNO 补丁制作方法的第一页

    INNO 补丁制作技术, 打开 INNO 补丁制作方法的第一页 作者:xin 日期:2005-09-23 字体大小: 小 中 大   VPatch 在 INNO 中的应用. VPatch 属于专为NS ...

  2. threadid=1: thread exiting with uncaught.exception ......解决方法

     threadid=1: thread exiting with uncaught exception (group=0x40015560)E/AndroidRuntime(285): FATAL E ...

  3. [家里蹲大学数学杂志]第047期18 世纪法国数学界的3L

    1 Lagrange---78岁 约瑟夫·拉格朗日, 全名约瑟夫·路易斯·拉格朗日 (Joseph-Louis Lagrange 1735~1813) 法国数学家.物理学家. 1736年1月25日生于 ...

  4. Chap5: question: 29 - 31

    29. 数组中出现次数超过一半的数字. 方法a. 排序取中       O(nlogn). 方法b. partition 函数分割找中位数     >=O(n). 方法c. 设计数变量,扫描一遍 ...

  5. 修复山寨版的J-Link

    Fixed J-Link 1. Erase   (1) Power On   (2) Jump "ERASE"(JP3)   (3) Wait for 5s   (4) Break ...

  6. TCP/IP 之大明王朝邮差

    本系列文章全部摘选自"码农翻身"公众号,仅供个人学习和分享之用.文章会给出原文的链接地址,希望不会涉及到版权问题. 个人感言:真正的知识是深入浅出的,码农翻身" 公共号将 ...

  7. 【EF学习笔记09】----------使用 EntityState 枚举标记实体状态,实现增删改查

    讲解之前,先来看一下我们的数据库结构:班级表 学生表 如上图,实体状态由EntityState枚举定义:Detached(未跟踪).Unchanged(未改变).Added(已添加).Deleted( ...

  8. Failed to load the JNI shared library jvm.dll

    jdk和使用的ide版本不符合,换一个版本的jdk或者换版本的ide

  9. struts2下s:iterator取不出值

    1:问题起因:通过action方法连接数据库取出Arraylist集合,在前台页面遍历显示无数据,用s:debug查看 stack里有值,用了各种方法,包括session传值,但是仍然取不出来. 2: ...

  10. easyui datagrid 跨页选择

    $.fn.extend( memberList ,{ quickSearch : function() { var time1 = new Date(); /* this.datagrid.datag ...