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

深入解析:MD5与SHA1哈希算法的应用与安全性分析

本文深入探讨了MD5与SHA1哈希算法在实际应用中的表现及其安全性。通过对这两种算法的详细分析,揭示了它们在数据完整性验证和密码存储等方面的优势与局限。文章不仅介绍了算法的基本原理,还讨论了近年来针对这些算法的安全性攻击,并提出了改进措施和替代方案。希望读者能够通过本文对哈希算法有更全面的理解。

近来想学习函数式编程。

但是一直不知道怎么展开这个学习过程,目前的研究进度也不深入,想讲解一些原理也无从下手。

先简单的上一些算法,逐步分析语法和思想。虽然程度不深,但至少能记录这个过程。

本例子用F#编写,是一种强类型,非纯函数式编程语言,在.net平台上运行,实际上为了兼容.net平台,你可以使用各种.net的基本类型和库。

C#的测试结果,从结果上看没有问题。

 

F#源码

 1 namespace Heron.Helpers
 2 
 3 open System.Text
 4 open System.Security.Cryptography
 5 
 6 module Encrypt =
 7     let Sha1Hash (str : string) = 
 8         let sha1 = SHA1.Create ()
 9         let sha1arr = sha1.ComputeHash (Encoding.UTF8.GetBytes (str))
10         let sha1str = String.concat "" (Array.init 20 (fun i -> sprintf "%02x" sha1arr.[i]))
11         sha1str
12 
13     let Md5Hash (str : string) =
14         let md5 = MD5.Create ()
15         let md5arr = md5.ComputeHash (Encoding.UTF8.GetBytes (str))
16         let md5str = String.concat "" (Array.init 16 (fun i -> sprintf "%02x" md5arr.[i]))
17         md5str

短短数行就完成,是不是很简洁呢。

 

namespace Heron.Helpers

open System.Text
open System.Security.Cryptography

/// 这段不用多说,namespace和C#中的功能一样,声明命名空间。
/// open相当于using ,导入一个命名空间
module Encrypt =
/// 这里的module是用来区分个模块功能的,对程序意义不大,在C#里被当作一个静态类处理兼容。F#是缩进敏感的语言,缩进比这段语句多一层的都属于这个模块下面的。所以下面的两个函数可以理解为这个模块的静态方法。
let Sha1Hash (str : string) = 
    let sha1 = SHA1.Create ()
    let sha1arr = sha1.ComputeHash (Encoding.UTF8.GetBytes (str))
    let sha1str = String.concat "" (Array.init 20 (fun i -> sprintf "%02x" sha1arr.[i]))
    sha1str

/// let是用来绑定一个标识符,可以是实数,可以是字符串,可以是对象,也可以是函数,这里绑定的就是一个函数,带有一个string类型的参数str,最后一行为返回值,这里就是返回sha1str这个标识。实际上纯函数语言里是没有变量的,也没有基本类型,所有的东西都是函数,比如 let a = 0,你可以理解为没有参数,返回int的函数。F#为了兼容.net平台,类型都是静态绑定,靠自动推算来得到类型。
/// 这里用到的F#特性不多,只有第4行用到一点。可能看起来有点晕,我们来分解一下
Array.init 20 (fun i -> sprintf "%02x" sha1arr.[i])
/// Array.init 这是一个函数,有两个参数,第一个表示返回的数组个数,第二个参数为一个匿名函数,就是括号里的内容(fun i -> sprintf "%02x" sha1arr.[i])。这个函数会迭代i 从0到19 刚好对应sha1arr的下标,然后一次转为16进制的数表示,不足的前面补零。
String.concat "" Array
/// 这个是把一个数组元素拼接为一个字符串的函数,第一个参数是拼接的符号,这里是空字符串,第二个参数是数组,就是上面生成的20个16进制的数。
/// 是不是代码简洁了很多呢

 

以后可能会陆续带来参数函数,返回值函数等高阶函数和泛型的随笔。不过我还是希望从实际数据着手,要有实际应用的空间。因为现在掌握的也不深,也没多少东西卖弄。

以后我会慢慢收集各种实用的算法,然后形成一个工具包,等实用度达到一定基础后会发布出来。不知道大家看好不。

如果大家有对函数编程的独特见解,也欢迎留言讨论。


推荐阅读
  • H3C防火墙自动构建安全隧道
    实验拓扑结构:两端采用静态IP地址配置。H3C防火墙能够自动构建IPSec安全隧道,确保数据传输的安全性。通过配置防火墙的非信任区域,实现自动化安全连接的建立与维护,有效提升网络防护能力。 ... [详细]
  • 内网渗透技术详解:PTH、PTT与PTK在域控环境中的应用及猫盘内网穿透配置
    本文深入探讨了内网渗透技术,特别是PTH、PTT与PTK在域控环境中的应用,并详细介绍了猫盘内网穿透的配置方法。通过这些技术,安全研究人员可以更有效地进行内网渗透测试,解决常见的渗透测试难题。此外,文章还提供了实用的配置示例和操作步骤,帮助读者更好地理解和应用这些技术。 ... [详细]
  • 深入解析JDK中的四种随机数生成器
    我们从jdk8说起。主要是四个随机数生成器。神马?有四个? 接下来我们简单说下这几个类的使用场景,来了解其中的细微差别,和a ... [详细]
  • 一、遇到问题javamd5的输出结果和phpmd5的输出结果不 ... [详细]
  • 深入解析Android应用中的UID与PID机制及其作用
    在使用开发工具连接手机时,我们经常能看到进程编号,如PID和UID。在Android系统中,PID代表进程标识符,而UID则是用户标识符。与传统计算机系统不同,Android中的每个应用程序都对应一个唯一的UID,这不仅用于区分不同的应用程序,还用于实现系统的安全性和资源管理。通过这种方式,Android能够有效控制应用的权限和资源使用,确保系统的稳定性和安全性。 ... [详细]
  • MD5,即消息摘要算法5,是一种广泛应用于确保数据传输完整性的哈希算法。作为计算机领域常用的杂凑算法之一,MD5在多种主流编程语言中均有实现。此外,本文还详细解析了SHA、DES、3DES、AES、RSA和ECC等加密算法的基本原理和应用场景,为读者提供全面的加密技术概览。 ... [详细]
  • 数据安全领域中的网络信息加密技术探析
    在数据安全领域,网络信息加密技术扮演着至关重要的角色。本文探讨了多种加密算法,包括对称加密算法如AES、RC4,以及非对称加密算法如RSA、ECC等。对称加密算法中,AES因其高效性和安全性被广泛采用;而非对称加密算法中,RSA以其强大的密钥管理能力成为行业标准。此外,ECC由于其在资源受限环境下的高效性能,逐渐受到青睐。本文还详细分析了这些算法的特点及其应用场景,为数据安全提供了全面的技术支持。 ... [详细]
  • 数据压缩与编解码技术优化
    编码的种类  编码(Encoding)在认知上是解释传入的刺激的一种基本知觉的过程。技术上来说,这是一个复杂的、多阶段的转换过程,从较为客观的感觉输入& ... [详细]
  • 读书笔记来自图解HTTP1.HTTP的缺点 通信使用明文(不加密),内容可能会被窃听不验证通信方的身份,因此有可能遭遇伪装无 ... [详细]
  • 一、媒介  Koa为了坚持本身的简约,并没有绑缚中间件。然则在现实的开辟中,我们须要和五花八门的中间件打交道,本文将要剖析的是常常用到的路由中间件—koa-router。  假如你 ... [详细]
  • 本文初步探讨了PHP中基于JWT(JSON Web Token)的身份验证机制。具体流程包括:1. 客户端通过用户名和密码发起登录请求;2. 服务器接收并验证用户凭证的合法性,若验证通过,则生成并返回一个JWT令牌;3. 客户端接收该令牌,并在后续请求中携带此令牌以完成身份验证。这一机制不仅提高了安全性,还简化了会话管理。 ... [详细]
  • 在JSP页面中调用客户端本地应用程序(例如 `C:\netterm.exe`)时,可以通过使用 `Runtime.getRuntime().exec("c:\\netterm.exe")` 实现。然而,这种方法仅在服务器端有效,若要实现在客户端执行本地程序,需要采用其他技术手段,如Java Applet或ActiveX控件,以确保安全性和兼容性。 ... [详细]
  • 5月24日安全资讯焦点:ZOOM端到端加密技术详解白皮书发布 ... [详细]
  • {moduleinfo:{card_count:[{count_phone:1,count:1}],search_count:[{count_phone:4 ... [详细]
  • Markdown语法说明:http:www.appinn.commarkdown1、前端碎片知识总结篇1.1关于浏览器IE的内核是Trident、Mozilla的内核 ... [详细]
author-avatar
平凡的如果爱166
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有