常用的安全算法

总结了项目中常用的安全算法 , 包括 MD5 , SHA , DES , AES , RSA 等 ;

一、数字摘要算法

数字摘要也称为消息摘要 , 它是一个唯一对应一个消息或文本的固定长度的值 , 它由一个单向 Hash 函数对消息进行计算而产生 ; 如果消息在传递的途中改变了 , 接收者通过对收到消息采用相同的 Hash 重新计算 , 新产生的摘要与原摘要进行比较 , 就可知道消息是否被篡改了 , 因此消息摘要能够验证消息的完整性 ; 消息摘要采用单向 Hash 函数将需要计算的内容 摘要 成固定长度的串 , 这个串亦称为数字指纹 ; 这个串有固定的长度 , 且不同的明文摘要成密文 , 其结果总是不同的 , 而同样的明文其摘要必定一致 ; 这样这串摘要便可成为验证明文是否是 真身指纹 了 ;

1. Md5

MD5即Message-Digest Algorithm 5 (信息-摘要算法5) , 用于确保信息传输完整一致 ; 是计算机广泛使用的杂凑算法之一 (又译摘要算法 , 哈希算法) , 主流编程语言普遍已有MD5实现 ; 将数据运算为另一固定长度值 , 是杂凑算法的基础原理 ; MD5 的前身有 MD2 , MD3 和 MD4 ; MD5算法具有以下特点 :

  1. 压缩性:任意长度的数据,算出的MD5值长度都是固定的。
  2. 容易计算:从原数据计算出MD5值很容易。
  3. 抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大区别。
  4. 强抗碰撞:已知原数据和其MD5值,想找到一个具有相同MD5值的数据(即伪造数据)是非常困难的。

MD5的作用是让大容量信息在用数字签名软件签署私人密钥前被 压缩 成一种保密的格式 (把一个任意长度的字节串变换成一定长的 十六进制数字串 );

源码链接 <>

2. SHA

SHA的全称是 Secure Hash Algorithm , 即安全散列算法 ; 安全散列算法由美国国家标准和技术协会 (NIST) 提出 , 并作为联邦信息处理标准 (FIPS PUB 180) 公布 ; 正式名称为 SHA 的家族第一个成员发布于 1993年 , 然而现在的人们给它取了一个非正式的名称 SHA-0 以避免与它的后继者混淆 ; 两年之后 SHA-1 , 第一个 SHA 的后继者发布了 ; 另外还有四种变体 , 曾经发布以提升输出的范围和变更一些细微设计 : SHA-224 , SHA-256 , SHA-384 和 SHA-512 (这些有时候也被称做SHA-2 ) ; 2005年 , 密码学家就证明 SHA-1 的破解速度比预期提高了2000倍 , 虽然破解仍然是极其困难和昂贵的 , 但随着计算机变得越来越快和越来越廉价 , SHA-1 算法的安全性也逐年降低 , 已被密码学家严重质疑 , 希望由安全强度更高的 SHA-2 替代它 ; 经过 2 年的研究 , 2017年初 Google 表示其已成功破解了 SHA-1 加密 , Google 晒出的两份特制 PDF 文档 , 虽然它们拥有相同的 SHA-1 哈希值 , 但内容上却不尽相同 ;

源码链接 <>


二、对称加密

对称加密算法是应用较早的加密算法 , 技术成熟 ; 在对称加密算法中 , 数据发送方将明文 (原始数据) 和 加密密钥 一起经过特殊加密算法处理后 , 生成复杂的加密密文进行发送 ; 数据接收方收到密文后 , 若想读取原文 , 则需要使用加密使用的 密钥 及相同算法的逆算法对加密的密文进行解密 , 才能使其恢复成可读明文 ; 在对称加密算法中 , 使用的密钥只有一个 , 发送和接收双方都使用这个密钥对数据进行加密和解密 , 这就要求加密和解密方事先都必须知道加密的密钥 ;

1. DES算法

1973 年 , 美国国家标准局 (NBS) 在认识到建立数据保护标准既明显又急迫的情况下 , 开始征集联邦数据加密标准的方案 ; 1975年3月17日 , NBS公布了 IBM 公司提供的密码算法 , 以标准建议的形式在全国范围内征求意见 ; 经过两年多的公开讨论之后 , 1977年7月15日 , NBS宣布接受这建议 , 作为联邦信息处理标准 46 号数据加密标准 (Data Encryptin Standard) , 即 DES 正式颁布 , 供商业界和非国防性政府部门使用 ; DES 算法属于对称加密算法 , 明文按 64 位进行分组 , 密钥长64位 , 但事实上只有 56 位参与 DES 运算(第8 , 16 , 24 , 32 , 40 , 48 , 56 , 64位是校验位 , 使得每个密钥都有奇数个1) , 分组后的明文和56位的密钥按位替代或交换的方法形成密文 ; 由于计算机运算能力的增强 , 原版 DES 密码的密钥长度变得容易被暴力破解 , 因此演变出了 3DES 算法 ; 3DES 是 DES 向 AES 过渡的加密算法 , 它使用3条56位的密钥对数据进行三次加密 , 是DES的一个更安全的变形 ;

源码链接 <>

2. AES

AES 的全称是 Advanced Encryption Standard , 即高级加密标准 , 该算法由比利时密码学家 Joan Daemen 和 Vincent Rijmen 所设计 , 结合两位作者的名字 , 又称Rijndael加密算法 , 是美国联邦政府采用的一种对称加密标准 , 这个标准用来替代原先的 DES 算法 , 已经广为全世界所使用 , 已然成为对称加密算法中最流行的算法之一 ; AES 算法作为新一代的数据加密标准汇聚了强安全性 , 高性能 , 高效率 , 易用和灵活等优点 , 设计有三个密钥长度 : 128 , 192 , 256 位 , 比 DES 算法的加密强度更高 , 更为安全 ;

源码链接 <>


三、非对称加密

非对称加密算法又称为公开密钥加密算法 , 它需要两个密钥 , 一个称为公开密钥 (public key) , 即公钥 , 另一个称为私有密钥 (private key) , 即私钥 ; 公钥与私钥需要配对使用 , 如果用公钥对数据进行加密 , 只有用对应的私钥才能进行解密 , 而如果使用私钥对数据进行加密 , 那么只有用对应的公钥才能进行解密 ; 因为加密和解密使用的是两个不同的密钥 , 所以这种算法称为非对称加密算法 ; 非对称加密算法实现机密信息交换的基本过程是 : 甲方生成一对密钥并将其中的一把作为公钥向其它人公开 , 得到该公钥的乙方使用该密钥对机密信息进行加密后再发送给甲方 , 甲方再使用自己保存的另一把专用密钥 , 即私钥 , 对加密后的信息进行解密 ;

非对称加密与对称加密相比 , 其安全性更好 : 对称加密的通信双方使用相同的秘钥 , 如果一方的秘钥遭泄露 , 那么整个通信就会被破解 ; 而非对称加密使用一对秘钥 , 一个用来加密 , 一个用来解密 , 而且公钥是公开的 , 秘钥是自己保存的 , 不需要像对称加密那样在通信之前要先同步秘钥 ; 非对称加密的缺点是加密和解密花费时间长 , 速度慢 , 只适合对少量数据进行加密 ;

一般项目中比较常见的做法是用非对称算法来交换 对称加密算法的密钥 , 再用对称算法来加密数据 ;

1. RSA

RSA 非对称加密算法是1977年由 Ron Rivest , Adi Shamirh 和 LenAdleman开发的 , RSA取名来自开发他们三者的名字 ; RSA是目前最有影响力的非对称加密算法 , 它能够抵抗到目前为止已知的所有密码攻击 , 已被 ISO 推荐为公钥数据加密标准 ; RSA 算法基于一个十分简单的数论事实 : 将两个大素数相乘十分容易 , 但反过来想要对其乘积进行因式分解却极其困难 , 因此可以将乘积公开作为加密密钥 ;

源码链接 <>

个人网站: Github , 欢迎点击给星

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
银行家算法是避免死锁的一种重要方法,本程序用java编程语言对其进行了实现。 当用户申请一组资源时,系统必须做出判断,如果把这些资源分出去,系统是否还处于安全状态。 若是,就可以分出这些资源;否则,该申请暂不予满足。 1.数据结构 假设有M个进程N类资源,则有如下数据结构: MAX[M*N] M个进程对N类资源的最大需求量 AVAILABLE[N] 系统可用资源数 ALLOCATION[M*N] M个进程已经得到N类资源的资源量 NEED[M*N] M个进程还需要N类资源的资源量 2.银行家算法 设进程I提出请求Request[N],则银行家算法按如下规则进行判断。 (1)如果Request[N]<=NEED[I,N],则转(2);否则,出错。 (2)如果Request[N]<=AVAILABLE,则转(3);否则,出错。 (3)系统试探分配资源,修改相关数据: AVAILABLE=AVAILABLE-REQUEST ALLOCATION=ALLOCATION+REQUEST NEED=NEED-REQUEST (4)系统执行安全性检查,如安全,则分配成立;否则试探险性分配作废,系统恢复原状,进程等待。 3.安全性检查 (1)设置两个工作向量WORK=AVAILABLE;FINISH[M]=FALSE (2)从进程集合中找到一个满足下述条件的进程, FINISH[i]=FALSE NEED<=WORK 如找到,执行(3);否则,执行(4) (3)设进程获得资源,可顺利执行,直至完成,从而释放资源。 WORK=WORK+ALLOCATION FINISH=TRUE GO TO 2 (4)如所有的进程Finish[M]=true,则表示安全;否则系统不安全

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值