密码加密方式

密码加密方式密码加密方式

大家好,又见面了,我是你们的朋友全栈君。

对称加密

特点:加密解密效率高、速度快、空间占用小、加密强度高
缺点:参与多方都需要持有密钥、一旦有一个人泄露则安全性遭到破坏、另外再不容安全通道下分发密钥也是个问题。
代表算法:DES、3DES、AES、IDEA等等
DES:其密钥长度为56位+8位校验 破解方式:暴力破解
3DES:3重DES操作 算法不能靠累积增加防御力
AES:分组算法、分组长度为128、192、256位三种、其优势在于 速度快 整个过程可以数学化描述、目前尚未有效破解手段
适合场景:适用于大量数据加解密、不能用于签名场景 需要提前分法密钥

非对称加密

介绍:即公钥+私钥 公钥是公开的、私钥是个人持有的
代表算法:RSA、EIGamal、椭圆算法 ECC
RSA:经典的公钥算法 安全性未知
EIGamal:利用了模运算下求离散对数困难的特性
椭圆曲线算法:现代备受关注的算法系列,基于对椭圆曲线上特定点进行特殊乘法逆运算难以计算的特性。
Ps:RSA 算法等已被认为不够安全,一般推荐采用椭圆曲线系列算法。

混合加密机制

先用计算复杂度高的非对称加密协商一个临时的对称加密密钥(会话密钥,一般相对内容来说要短得多),然后对方在通过对称加密对传递的大量数据进行加解密处理。

典型应用:现在大家常用的HTTPS机制、HTTPS实际上是利用了Transport Layer Security/Secure Socket Layer(TLS/SSL)来实现可靠性传输。
建立安全连接步骤:

  1. 客户端浏览器发送信息到服务器,包括随机数 R1,支持的加密算法类型、协议版本、压缩算法等。注意该过程为明文。
  2. 服务端返回信息,包括随机数 R2、选定加密算法类型、协议版本,以及服务器证书。注意该过程为明文。
  3. 浏览器检查带有该网站公钥的证书。该证书需要由第三方 CA 来签发,浏览器和操作系统会预置权威 CA 的根证书。如果证书被篡改作假(中间人攻击),很容易通过 CA 的证书验证出来。
  4. 如果证书没问题,则用证书中公钥加密随机数 R3,发送给服务器。此时,只有客户端和服务器都拥有 R1、R2 和 R3 信息,基于 R1、R2 和 R3,生成对称的会话密钥(如 AES算法)。后续通信都通过对称加密进行保护。

加盐加密

加盐需要注意两点:短盐值、盐值重复
两大弊端:盐值重复或者硬编到软件中、可以通过破解软件、专门为这个软件生成彩虹表和查询表
盐值太短:就相当于降低密码复杂度、这使得破解字典体积更小、跑字典破解更快。

  • 使用CSPRNG生成一个长度足够的盐值
    将盐值混入密码,并使用标准的加密哈希函数进行加密,如SHA256,再把哈希值和盐值一起存入数据库中对应此用户的那条记录
  • 校验密码的步骤
    从数据库取出用户的密码哈希值和对应盐值,将盐值混入用户输入的密码,并且使用同样的哈希函数进行加密,比较上一步的结果和数据库储存的哈希值是否相同,如果相同那么密码正确,反之密码错误
    加密部分代码:
public class MD5Test { 
   
@Test   
public void test(){ 
   
        //原始 密码 
 String source = "123456";       
 //盐 
String salt = "helen";        
//散列次数 
 int hashIterations = 1024;
  //构造方法: 
 //第一个参数:散列算法 
 //第二个参数:明文,原始密码 
 //第三个参数:盐,通过使用随机数 
 //第四个参数:散列的次数,比如散列两次,相当 于md5(md5('')) 
//这个加密的方法名不是乱写的,具体要看api,shiro提供了相当丰富的加密 方式,只是你//写的名字必须要和其一致
 SimpleHash simpleHash = new SimpleHash("md5", source, salt, hashIterations); 
       String md5 =  simpleHash.toString();        
       System.out.println(md5);  
}
}

在Web程序中,永远在服务器端进行哈希加密

让密码更难破解:慢哈希函数
PBKDF2、BCRYPT、SCRYPT曾经是最常用的三种密码Hash算法。

  • PBKDF2因为计算过程需要内存少所以可被GPU/ASIC加速,
  • BCRYPT不支持内存占用调整且容易被FPGA加速,
  • SCRYPT不支持单独调整内存或计算时间占用且可能被ASIC加速并有被旁路攻击的可能。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/106520.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • chrome下document.cookie为空

    chrome下document.cookie为空今天遇到一个待解决的问题:关于Chrome浏览器下,可设置cookie,但无法读取的问题!baidu.cookie.set(‘hideMask’,’1′);从这里可以看到chrome中相关的cookie存储情况,能找到已设置成功的cookie值:chrome://chrome/settings/cookies但是,通过document…

    2022年7月20日
  • html5 a标签去下划线,css中如何去掉a标签的下划线?[通俗易懂]

    html5 a标签去下划线,css中如何去掉a标签的下划线?[通俗易懂]我们在HTML网页制作过程中,相信大家对css文本超链接这个概念并不陌生。我们都知道想要给某段文本或者指定元素添加一个锚点也就是超链接需要用到HTML中的a标签。那么有的新手可能就会发现,在使用a标签时文本超链接会自动出现下划线!从视觉美观上来说枯燥单调的文本超链接显示显然并不好看。那么该如何去掉a标签的下划线呢?下面我们来看一下css去掉a标签下划线的方法。本篇文章就给大家详细讲讲怎么去掉css…

    2022年5月2日
  • 兄弟1218无线打印服务器错误,兄弟无线打印机无法打印怎么办?「建议收藏」

    兄弟1218无线打印服务器错误,兄弟无线打印机无法打印怎么办?「建议收藏」在使用打印机的过程中,打印失败是很常见的。互联网上有很多解决方案,但由于产品型号不同,解决方案并不通用,可能并不适合每台机器。今天,一秀。com的边肖将与你分享我哥哥的无线打印机无法打印的解决方案。别错过了!如果打印机无法打印,请首先确保打印机电器的电源线插入墙壁插座,并按下位于打印机顶部的“开/关”键。如果打印机有电源,请判断打印机是否在线。单击桌面上的开始按钮,然后选择打印机和传真。右键单击打…

    2022年5月30日
  • java中的基本数据类型一定存储在栈中吗?

    java中的基本数据类型一定存储在栈中吗?首先说明,”java中的基本数据类型一定存储在栈中的吗?”这句话肯定是错误的。下面让我们一起来分析一下原因:基本数据类型是放在栈中还是放在堆中,这取决于基本类型在何处声明,下面对数据类型在内存中的存储问题来解释一下: 一:在方法中声明的变量,即该变量是局部变量,每当程序调用方法时,系统都会为该方法建立一个方法栈,其所在方法中声明的变量就放在方法栈中,当方法结束系统会释放方法栈,其对应在该方法中声明的变量随着栈的销毁而结束,这就局部变量只能在方法中有效的原因 在方法中…

    2022年6月13日
  • 矩阵范数的等价性(原创)[通俗易懂]

    矩阵范数的等价性(原创)[通俗易懂]矩阵范数的等价设F=R”role=”presentation”>F=RF=R\mathbbF=\mathbbR或C,”role=”presentation”>C,C,\mathbbC,对于任意两个Fn×n”role=”presentation”>Fn×nFn×n\mathbbF^{n\timesn}上的范数‖⋅&#x

    2022年9月15日
  • 进程调度的概念[通俗易懂]

    进程调度的概念[通俗易懂]调度的概念1.调度的基本概念在多道程序系统中,进程的数量往往多于处理机的个数,进程争用处理机的情况就在所难免。处理机调度是对处理机进行分配,就是从就绪队列中,按照一定的算法(公平、髙效)选择一个进程并将处理机分配给它运行,以实现进程并发地执行。处理机调度是多道程序操作系统的基础,它是操作系统设计的核心问题。2.调度的层次一个作业从提交开始直到完成,往往要经历以下三级调度

    2022年9月29日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号