加密算法—MD5、RSA、DES

最近因为要做一个加密的功能,简单了解了一下加密算法,现在比较常用的有三个加密算法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.

    加密程序

 

[html] view plaincopy
  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)  



 

    调用 

[html] view plaincopy
  1. EDes = EncryptDes(DataData(j, k).Value, "12345678", "abcdefgh")  

 

 

    解密

 

[html] view plaincopy
  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>  

 

 

    调用

 

[html] view plaincopy
  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>  

 

 

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

转载于:https://www.cnblogs.com/miercler/p/5471692.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/396055.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

随机加密_随机艺术和加密圣诞树

随机加密When I first learned how to code, one of my first tasks was setting up an SSH key so I could use encryption to securely connect to my friend’s Linux server.当我第一次学习如何编码时&#xff0c;我的第一个任务是设置SSH密钥&#xff0c;以便可以使用加密…

用c语言编写一个2048 游戏,求c语言编写的2048游戏代码,尽量功能完善一些

正在编写中&#xff0c;请稍后&#xff01;追答 : 代码来了&#xff01;有点急&#xff0c;没做界面。追答 : 2048_launcher。c&#xff1a;#include#include#includevoid main(){printf("正在启动中&#xff0c;请稍后&#xff01;");Sleep(1000);system("bin\…

MySQL之数据库对象查看工具mysqlshow

mysqlshow&#xff1a;数据库对象查看工具&#xff0c;用来快速查找存在哪些数据库、数据库中的表、表中的列或索引。选项&#xff1a;--count 显示数据库和表的统计信息-k 显示指定的表中的索引-i 显示表的状态信息不带任何参数显示所有数据库[rootwww mys…

软件工程分组

电子零售系统 陈仔祥 孟拓 陈庚 汪力 郭澳林 崔祥岑 刘校 肖宇 武清 胡圣阳转载于:https://www.cnblogs.com/2231c/p/9960751.html

vnr光学识别怎么打开_干货|指纹锁的指纹识别模块的前世今生,智能锁的指纹识别到底有多智能?...

智能锁现在也有很多叫法&#xff1a;指纹锁、电子锁。可见指纹识别是智能锁的核心功能了&#xff0c;那我们今天来聊聊智能锁的指纹识别模块。指纹识别的历史指纹识别认证的流程指纹识别技术的种类指纹识别的历史早在2000多年前我国古代的人就将指纹用于签订合同和破案了&#…

使用Kakapo.js进行动态模拟

by zzarcon由zzarcon 使用Kakapo.js进行动态模拟 (Dynamic mocking with Kakapo.js) 3 months after the first commit, Kakapo.js reaches the first release and we are proud to announce that now it is ready to use. Let us introduce you Kakapo.首次提交3个月后&#…

android ble 实现自动连接,Android:自动重新连接BLE设备

经过多次试验和磨难之后,这就是我最好让Android自动连接的唯一用户操作是首先选择设备(如果使用设置菜单然后首先配对).您必须将配对事件捕获到BroadcastReceiver中并执行BluetoothDevice.connectGatt()将autoconnect设置为true.然后当设备断开连接时,调用gatt.connect().更新&…

莱斯 (less)

less中的变量 1、声明变量&#xff1a;变量名&#xff1a;变量值 使用变量名&#xff1a;变量名 less中的变量类型 ①数字类1 10px ②字符串&#xff1a;无引号字符串red和有引号字符串"haha" ③颜色类red#000000 rgb() …

hackintosh黑苹果_如何构建用于编码的Hackintosh

hackintosh黑苹果by Simon Waters西蒙沃特斯(Simon Waters) 如何构建用于编码的Hackintosh (How to build a Hackintosh for coding) Let’s talk about Hackintosh-ing — the installation of Mac OS X on PC hardware.我们来谈谈Hackintosh-ing-在PC硬件上安装Mac OSX。 I…

hide show vue 动画_(Vue动效)7.Vue中动画封装

关键词&#xff1a;动画封装——进行可复用一、如何封装&#xff1f;1、使用&#xff1a;局部组件传递数据局部组件中使用JS动画2、原理&#xff1a;将动画效果完全第封装在一个名为<fade>的组件中&#xff0c;今后如要复用&#xff0c;只需要复制有其组件名的部分&#…

android项目编译命令行,命令行编译Android项目

1. 生成R文件> aapt package -f -m -J ./gen -S res -M AndroidManifest.xml -I D:\android.jar-f 如果编译生成的文件已经存在&#xff0c;强制覆盖。-m 使生成的包的目录存放在-J参数指定的目录-J 指定生成的R.java 的输出目录路径-S 指定res文件夹的路径-I 指定某个版本平…

jQuery datepicker和jQuery validator 共用时bug

当我们给一个元素绑定一个datepick后又要对它用validator进行验证时会发现验证并没有成功 因为当点击该元素时候input弹出datepick的UI就已经失去了焦点它验证的仍然是前一个值&#xff0c; 不过还好 datepick提供了onSelect 事件我们可以在这个事件触发的时候重新把焦点在赋给…

《Python地理数据处理》——导读

前言本书可以帮助你学习使用地理空间数据的基础知识&#xff0c;主要是使用GDAL / OGR。当然&#xff0c;还有其他选择&#xff0c;但其中一些都是建立在GDAL的基础之上&#xff0c;所以如果你理解了本书中的内容&#xff0c;就可以很轻松地学习其他知识。这不是一本关于地理信…

记一次Java AES 加解密 对应C# AES加解密 的一波三折

最近在跟三方对接 对方采用AES加解密 作为一个资深neter Ctrl CV 是我最大的优点 所以我义正言辞的问他们要了demo java demo代码&#xff1a; public class EncryptDecryptTool {private static final String defaultCharset "UTF-8";private static final String …

zemax评价函数编辑器_ZEMAX与光学设计案例:激光扩束系统详细设计与公差分析(二)...

目前超过两千人的光学与光学设计方面的微信公众号&#xff0c;欢迎您的到来&#xff01;激光扩束系统公差分析ZEMAX与光学设计案例&#xff1a;激光扩束系统详细设计与公差分析(二)作者&#xff1a;墨子川上10倍扩束系统在上篇已经设计好了&#xff0c;接下来就是进行系统的公差…

决策者根据什么曲线做出决策_如何做出产品设计决策

决策者根据什么曲线做出决策by Tanner Christensen由Tanner Christensen 如何做出产品设计决策 (How Product Design Decisions are Made) Recently in a Facebook group dedicated to designers, known as Designers Guild, a young design student named Marina Candela ask…

移动前端框架重构几个关键问题

1. 是否该废弃iscroll&#xff1f; 我得出的结论是&#xff0c;是该废弃了。那当时为什么要用iscroll&#xff1f; 原因有三个&#xff1a; 1. 因为别人也用了。 2. 为了iPhone上页面滑动更顺畅。 3. 为了用上拉、下拉刷新。 关于这三个原因有几点观点&#xff1a; 1. 人最容易…

android 内部共享存储,Android共享内部存储

我现在面对txt文件的类似情况,并做到了这一点.File downloadedFile new File( context.getFilesDir(),"simple.txt" );downloadedFile.setReadable( true,false );downloadedFile.setWritable( true,false ); //set read/write for othersUri downloadFileUri Uri.f…

UiPath: Selectors repair 选择器的修复,即被选择的按钮发生改变如何选择第二按钮...

实现批量注册用户功能时&#xff0c;出现第一个用户注册完时&#xff0c;弹出确认按钮&#xff0c;点击即可&#xff0c;但是第二个用户注册完成时&#xff0c;弹出的按钮与第一个有差异&#xff0c;图形用户界面元素及其父元素的属性都发生改变。所以就点不了按钮&#xff0c;…

《C专家编程》一1.6 它很棒,但它符合标准吗

本节书摘来自异步社区《C专家编程》一书中的第1章&#xff0c;第1.6节&#xff0c;作者 【美】Perter Van Der Linde&#xff0c;更多章节内容可以访问云栖社区“异步社区”公众号查看 1.6 它很棒&#xff0c;但它符合标准吗 不要添乱——立即解散ISO工作小组。 ——匿名人士 …