精华内容
下载资源
问答
  • 主要介绍了java加密算法,包括rsa解密、对称加密、md5加密等,需要的朋友可以参考下
  • MD5和RSA加密算法Java完成实现,及实现RSA需要用的jar包。参见博文 http://blog.csdn.net/yanzi1225627/article/details/26508035
  • MD5将任意长度的“字节串”变换成一个128bit的大整数,并且它是一个不可逆的字符串变换算法,换句话说就是,即使你看到源程序和算法描述,也无法将一个MD5的值变换回原始的字符串,从数学原理上说,是因为原始的字符...
  • MD5和RSA是网络传输中最常用的两个算法,本例使用MD5和RSA加密算法实现加密解密,可直接在项目中使用,非常方便可靠!
  • DES,MD5,RSA加密算法

    2014-10-24 08:57:30
    DES,MD5,RSA加密算法:相关博文:http://www.cnblogs.com/tianzhijiexian/p/4047368.html
  • MarkDown文档,使用表格形式展示了RSA签名算法和RSA2签名算法的区别,是一篇阐明概念的文档
  • MD5加密和RSA加密

    千次阅读 2017-11-05 14:04:44
     MD5(单向散列算法)的全称是Message-Digest Algorithm 5(信息-摘要算法),MD5算法的使用不需要支付任何版权费用。    MD5的功能:  ①.输入任意长度的信息,经过处理,输出为128位的信息(数字指纹); ②....
    1.MD5加密
    

       MD5(单向散列算法)的全称是Message-Digest Algorithm 5(信息-摘要算法),MD5算法的使用不需要支付任何版权费用。

      

      MD5的功能:

          ①.输入任意长度的信息,经过处理,输出为128位的信息(数字指纹);
          ②.不同的输入得到的不同的结果(唯一性);
          ③.根据128位的输出结果不可能反推出输入的信息(不可逆),也就是只能加密,不能解密; 

     

      MD5的用途:

          1、防止被篡改
          1)比如发送一个电子文档,发送前,我先得到MD5的输出结果a。然后在对方收到电子文档后,对方也得到一个MD5的输出结果b。如果a与b一样就代表中途未被篡改。2)比如我提供文件下载,为了防止不法分子在安装程序中添加木马,我可以在网站上公布由安装文件得到的MD5输出结果。3)SVN在检测文件是否在CheckOut后被修改过,也是用到了MD5.

          2、防止直接看到明文
          现在很多网站在数据库存储用户的密码的时候都是存储用户密码的MD5值。这样就算不法分子得到数据库的用户密码的MD5值,也无法知道用户的密码(其实这样是不安全的,后面我会提到)。(比如在UNIX系统中用户的密码就是以MD5(或其它类似的算法)经加密后存储在文件系统中。当用户登录的时候,系统把用户输入的密码计算成MD5值,然后再去和保存在文件系统中的MD5值进行比较,进而确定输入的密码是否正确。通过这样的步骤,系统在并不知道用户密码的明码的情况下就可以确定用户登录系统的合法性。这不但可以避免用户的密码被具有系统管理员权限的用户知道,而且还在一定程度上增加了密码被破解的难度。)

          3、防止抵赖(数字签名):
          这需要一个第三方认证机构。例如A写了一个文件,认证机构对此文件用MD5算法产生摘要信息并做好记录。若以后A说这文件不是他写的,权威机构只需对此文件重新产生摘要信息,然后跟记录在册的摘要信息进行比对,相同的话,就证明是A写的了。这就是所谓的“数字签名”。

     

      我们强大的支付宝使用MD5加密,正式因为MD5强大的用途。

     

    2.RSA加密

      ①.RSA是第一个比较完善的公开密钥算法,它既能用于加密,也能用于数字签名。

        ②.RSA加密是可逆的,一个字符串可以经rsa加密后,经加密后的字符串传到对端如服务器上,再进行解密即可。前提是服务器知道解密的私钥,当然这个私钥最好不要再网络传输。

        ③.RSA以它的三个发明者Ron Rivest, Adi Shamir, Leonard Adleman的名字首字母命名,这个算法经受住了多年深入的密码分析,虽然密码分析者既不能证明也不能否定RSA的安全性,但这恰恰说明该算法有一定的可信性,目前它已经成为最流行的公开密钥算法。
        ④.RSA的安全基于大数分解的难度。其公钥和私钥是一对大素数(100到200位十进制数或更大)的函数。从一个公钥和密文恢复出明文的难度,等价于分解两个大素数之积(这是公认的数学难题)。

     

      RSA的公钥、私钥的组成,以及加密、解密的公式可见于下表:


          

      

      RSA的安全性:

      在RSA密码应用中,公钥KU是被公开的,即e和n的数值可以被第三方窃听者得到。破解RSA密码的问题就是从已知的e和n的数值(n等于pq),想法求出d的数值,这样就可以得到私钥来破解密文。从上文中的公式:d ≡e-1 (mod((p-1)(q-1)))或de≡1 (mod((p-1)(q-1))) 我们可以看出。密码破解的实质问题是:从Pq的数值,去求出(p-1)和(q-1)。换句话说,只要求出p和q的值,我们就能求出d的值而得到私钥。
       当p和q是一个大素数的时候,从它们的积pq去分解因子p和q,这是一个公认的数学难题。比如当pq大到1024位时,迄今为止还没有人能够利用任何计算工具去完成分解因子的任务。因此,RSA从提出到现在已近二十年,经历了各种攻击的考验,逐渐为人们接受,普遍认为是目前最优秀的公钥方案之一。
      然而,虽然RSA的安全性依赖于大数的因子分解,但并没有从理论上证明破译RSA的难度与大数分解难度等价。即RSA的重大缺陷是无法从理论上把握它的保密性能如何。
      此外,RSA的缺点还有:A)产生密钥很麻烦,受到素数产生技术的限制,因而难以做到一次一密。B)分组长度太大,为保证安全性,n 至少也要 600 bits 以上,使运算代价很高,尤其是速度较慢,较对称密码算法慢几个数量级;且随着大数分解技术的发展,这个长度还在增加,不利于数据格式的标准化。因此,使用RSA只能加密少量数据,大量的数据加密还要靠对称密码算法。

     

      我相信这么强大的加密方式想要破解,几乎不可能吧。这也是RSA用在支付宝加密中的原因。

    展开全文
  • RSAMD5加密算法的区别应用

    千次阅读 2019-10-29 09:52:24
    RSA算法: 是典型的非对称加密算法,主要具有数字签名验签的功能。 MD5算法: 是消息摘要算法,只能用来生成消息摘要无法进行数字签名。 IDEA算法RC4算法: 对称加密算法,只能用来进行数据加密。 ...

    RSA算法: 是典型的非对称加密算法,主要具有数字签名和验签的功能。
    MD5算法: 是消息摘要算法,只能用来生成消息摘要无法进行数字签名。
    IDEA算法和RC4算法: 对称加密算法,只能用来进行数据加密。

    展开全文
  • 生活中我们经常会遇到一些加密算法,今天我们就聊聊这些...md5加密算法是不可逆的,所以解密一般都是通过暴力穷举方法,通过网站的接口实现解密。Python代码: import hashlib m = hashlib.md5() m.update(str.enco
  • Delphi加密算法集,包括了Delphi AES DES MD5 RSA BASE64 2DES 3DES Blowfish CRC32-Static SHA等 常用的加密算法用法实例,比较不错的Delphi加密实例代码了,浅显易懂而且实用的常见加密算法实例,包括字符串文件...
  • JAVA RSA 加密算法 RSA.java RSA公钥加解密,RSA私钥加解密,MD5withRSA 签名 MD5withRSA签名较验
  • Java版MD5和RSA加解密算法完整实现,欢迎分享!
  • RSA_MD5加密算法

    2018-05-15 10:09:19
    RSA_MD5算法
  • 前端JS实现密码加密(base64.js, md5.js, sha1.js,jsencrypt.js),使用方式请看我这篇文章:https://blog.csdn.net/guxingsheng/article/details/84451573
  • 对称性加密算法:对称式加密就是加密解密使用同一个密钥。信息接收双方都需事先知道密匙加解密算法且其密匙是相同的,之后便是对数据进行加解密了。对称加密算法用来对敏感数据等信息进行加密。 非对称算法:非...

    加密技术通常分为两大类:"对称式"和"非对称式"。

    对称性加密算法:对称式加密就是加密和解密使用同一个密钥。信息接收双方都需事先知道密匙和加解密算法且其密匙是相同的,之后便是对数据进行加解密了。对称加密算法用来对敏感数据等信息进行加密。

    非对称算法:非对称式加密就是加密和解密所使用的不是同一个密钥,通常有两个密钥,称为"公钥"和"私钥",它们两个必需配对使用,否则不能打开加密文件。发送双方A,B事先均生成一堆密匙,然后A将自己的公有密匙发送给B,B将自己的公有密匙发送给A,如果A要给B发送消 息,则先需要用B的公有密匙进行消息加密,然后发送给B端,此时B端再用自己的私有密匙进行消息解密,B向A发送消息时为同样的道理。

    散列算法:散列算法,又称哈希函数,是一种单向加密算法。在信息安全技术中,经常需要验证消息的完整性,散列(Hash)函数提供了这一服务,它对不同长度的输入消息,产生固定长度的输出。这个固定长度的输出称为原输入消息的"散列"或"消息摘要"(Message digest)。散列算法不算加密算法,因为其结果是不可逆的,既然是不可逆的,那么当然不是用来加密的,而是签名。

     

    对称性加密算法有:AES、DES、3DES
    用途:对称加密算法用来对敏感数据等信息进行加密

    DES(Data Encryption Standard):数据加密标准,速度较快,适用于加密大量数据的场合。

    3DES(Triple DES):是基于DES,对一块数据用三个不同的密钥进行三次加密,强度更高。

    AES(Advanced Encryption Standard):高级加密标准,是下一代的加密算法标准,速度快,安全级别高;AES是一个使用128为分组块的分组加密算法,分组块和128、192或256位的密钥一起作为输入,对4×4的字节数组上进行操作。众所周之AES是种十分高效的算法,尤其在8位架构中,这源于它面向字节的设计。AES 适用于8位的小型单片机或者普通的32位微处理器,并且适合用专门的硬件实现,硬件实现能够使其吞吐量(每秒可以到达的加密/解密bit数)达到十亿量级。同样,其也适用于RFID系统。

     

    非对称性算法有:RSA、DSA、ECC

    RSA:由 RSA 公司发明,是一个支持变长密钥的公共密钥算法,需要加密的文件块的长度也是可变的。RSA在国外早已进入实用阶段,已研制出多种高速的RSA的专用芯片。

    DSA(Digital Signature Algorithm):数字签名算法,是一种标准的 DSS(数字签名标准),严格来说不算加密算法。

    ECC(Elliptic Curves Cryptography):椭圆曲线密码编码学。ECC和RSA相比,具有多方面的绝对优势,主要有:抗攻击性强。相同的密钥长度,其抗攻击性要强很多倍。计算量小,处理速度快。ECC总的速度比RSA、DSA要快得多。存储空间占用小。ECC的密钥尺寸和系统参数与RSA、DSA相比要小得多,意味着它所占的存贮空间要小得多。这对于加密算法在IC卡上的应用具有特别重要的意义。带宽要求低。当对长消息进行加解密时,三类密码系统有相同的带宽要求,但应用于短消息时ECC带宽要求却低得多。带宽要求低使ECC在无线网络领域具有广泛的应用前景。

     

    散列算法(签名算法)有:MD5、SHA1、HMAC
    用途:主要用于验证,防止信息被修。具体用途如:文件校验、数字签名、鉴权协议

    MD5:MD5是一种不可逆的加密算法,目前是最牢靠的加密算法之一,尚没有能够逆运算的程序被开发出来,它对应任何字符串都可以加密成一段唯一的固定长度的代码。

    SHA1:是由NISTNSA设计为同DSA一起使用的,它对长度小于264的输入,产生长度为160bit的散列值,因此抗穷举(brute-force)性更好。SHA-1设计时基于和MD4相同原理,并且模仿了该算法。SHA-1是由美国标准技术局(NIST)颁布的国家标准,是一种应用最为广泛的Hash函数算法,也是目前最先进的加密技术,被政府部门和私营业主用来处理敏感的信息。而SHA-1基于MD5,MD5又基于MD4。

    HMAC:是密钥相关的哈希运算消息认证码(Hash-based Message Authentication Code),HMAC运算利用哈希算法,以一个密钥和一个消息为输入,生成一个消息摘要作为输出。也就是说HMAC是需要一个密钥的。所以,HMAC_SHA1也是需要一个密钥的,而SHA1不需要。

     

    其他常用算法:

    Base64:其实不是安全领域下的加密解密算法,只能算是一个编码算法,通常用于把二进制数据编码为可写的字符形式的数据,对数据内容进行编码来适合传输(可以对img图像编码用于传输)。这是一种可逆的编码方式。编码后的数据是一个字符串,其中包含的字符为:A-Z、a-z、0-9、+、/,共64个字符(26 + 26 + 10 + 1 + 1 = 64,其实是65个字符,“=”是填充字符。Base64要求把每三个8Bit的字节转换为四个6Bit的字节(3*8 = 4*6 = 24),然后把6Bit再添两位高位0,组成四个8Bit的字节,也就是说,转换后的字符串理论上将要比原来的长1/3。原文的字节最后不够3个的地方用0来补足,转换时Base64编码用=号来代替。这就是为什么有些Base64编码会以一个或两个等号结束的原因,中间是不可能出现等号的,但等号最多只有两个。其实不用"="也不耽误解码,之所以用"=",可能是考虑到多段编码后的Base64字符串拼起来也不会引起混淆。)
    Base64编码是从二进制到字符的过程,像一些中文字符用不同的编码转为二进制时,产生的二进制是不一样的,所以最终产生的Base64字符也不一样。例如"上网"对应utf-8格式的Base64编码是"5LiK572R", 对应GB2312格式的Base64编码是"yc/N+A=="。
    标准的Base64并不适合直接放在URL里传输,因为URL编码器会把标准Base64中的“/”和“+”字符变为形如“%XX”的形式,而这些“%”号在存入数据库时还需要再进行转换,因为ANSI SQL中已将“%”号用作通配符。
    为解决此问题,可采用一种用于URL的改进Base64编码,它不在末尾填充'='号,并将标准Base64中的“+”和“/”分别改成了“-”和“_”,这样就免去了在URL编解码和数据库存储时所要作的转换,避免了编码信息长度在此过程中的增加,并统一了数据库、表单等处对象标识符的格式。
    另有一种用于正则表达式的改进Base64变种,它将“+”和“/”改成了“!”和“-”,因为“+”,“*”以及前面在IRCu中用到的“[”和“]”在正则表达式中都可能具有特殊含义。
    此外还有一些变种,它们将“+/”改为“_-”或“._”(用作编程语言中的标识符名称)或“.-”(用于XML中的Nmtoken)甚至“_:”(用于XML中的Name)。

    ​HTTPS(全称:Hypertext Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL(SSL使用40 位关键字作为RC4流加密算法,这对于商业信息的加密是合适的。),因此加密的详细内容就需要SSL。https:URL表明它使用了HTTP,但HTTPS存在不同于HTTP的默认端口及一个加密/身份验证层(在HTTP与TCP之间),提供了身份验证与加密通讯方法,现在它被广泛用于万维网上安全敏感的通讯,例如交易支付方面。它的主要作用可以分为两种:一种是建立一个信息安全通道,来保证数据传输的安全;另一种就是确认网站的真实性。

     

    项目应用总结:
    1. 加密算法是可逆的,用来对敏感数据进行保护。散列算法(签名算法、哈希算法)是不可逆的,主要用于身份验证。
    2. 对称加密算法使用同一个密匙加密和解密,速度快,适合给大量数据加密。对称加密客户端和服务端使用同一个密匙,存在被抓包破解的风险。
    3. 非对称加密算法使用公钥加密,私钥解密,私钥签名,公钥验签。安全性比对称加密高,但速度较慢。非对称加密使用两个密匙,服务端和客户端密匙不一样,私钥放在服务端,黑客一般是拿不到的,安全性高。
    4. Base64不是安全领域下的加解密算法,只是一个编码算法,通常用于把二进制数据编码为可写的字符形式的数据,特别适合在http,mime协议下的网络快速传输数据。UTF-8和GBK中文的Base64编码结果是不同的。采用Base64编码不仅比较简短,同时也具有不可读性,即所编码的数据不会被人用肉眼所直接看到,但这种方式很初级,很简单。Base64可以对图片文件进行编码传输。
    5. https协议广泛用于万维网上安全敏感的通讯,例如交易支付方面。它的主要作用可以分为两种:一种是建立一个信息安全通道,来保证数据传输的安全;另一种就是确认网站的真实性。
    6. 大量数据加密建议采用对称加密算法,提高加解密速度;小量的机密数据,可以采用非对称加密算法。在实际的操作过程中,我们通常采用的方式是:采用非对称加密算法管理对称算法的密钥,然后用对称加密算法加密数据,这样我们就集成了两类加密算法的优点,既实现了加密速度快的优点,又实现了安全方便管理密钥的优点。
    7. MD5标准密钥长度128位(128位是指二进制位。二进制太长,所以一般都改写成16进制,每一位16进制数可以代替4位二进制数,所以128位二进制数写成16进制就变成了128/4=32位。16位加密就是从32位MD5散列中把中间16位提取出来);sha1标准密钥长度160位(比MD5摘要长32位),Base64转换后的字符串理论上将要比原来的长1/3。

     

    参考文章:
    http://www.cnblogs.com/mddblog/p/5380556.html
    http://blog.csdn.net/xuefeng0707/article/details/19845111
    http://blog.csdn.net/benbenxiongyuan/article/details/7756912
    https://zh.wikipedia.org/wiki/Base64
    http://www.cnblogs.com/hongru/archive/2012/01/14/2321397.html
    http://www.cnblogs.com/chengxiaohui/articles/3951129.html
    http://www.cnblogs.com/fireway/p/5860622.html
    http://www.cnblogs.com/JCSU/articles/2803598.html
    https://baike.so.com/doc/5404553-5642272.html
    http://www.cnblogs.com/yangywyangyw/archive/2012/07/31/2620861.html

    展开全文
  • Message Digest Algorithm MD5(中文名为消息摘要算法第五版)为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护。 是计算机广泛使用的杂凑算法之一(又译摘要算法、哈希算法),主流编程语言普遍...

    密码加盐MD5

    Message Digest Algorithm MD5(中文名为消息摘要算法第五版)为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护。
    是计算机广泛使用的杂凑算法之一(又译摘要算法、哈希算法),主流编程语言普遍已有MD5实现。将数据(如汉字)运算为另一固定长度值.
    MD5算法具有以下特点:
    1、压缩性:任意长度的数据,算出的MD5值长度都是固定的。
    2、容易计算:从原数据计算出MD5值很容易。
    3、抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大区别。
    4、强抗碰撞:已知原数据和其MD5值,想找到一个具有相同MD5值的数据(即伪造数据)是非常困难的。
    MD5应用
    一致性验证
    典型应用是对一段信息(Message)产生信息摘要(Message-Digest),以防止被篡改
    安全访问认证
    MD5还广泛用于操作系统的登陆认证上,如Unix、各类BSD系统登录密码、数字签名等诸多方面。如在Unix系统中用户的密码是以MD5(或其它类似的算法)经Hash运算后存储在文件系统中。当用户登录的时候,系统把用户输入的密码进行MD5 Hash运算,然后再去和保存在文件系统中的MD5值进行比较,进而确定输入的密码是否正确

    盐(Salt)
    在密码学中,是指通过在密码任意固定位置插入特定的字符串,让散列后的结果和使用原始密码的散列结果不相符,这种过程称之为“加盐”。
    以上这句话是维基百科上对于 Salt 的定义,但是仅凭这句话还是很难理解什么叫 Salt,以及它究竟起到什么作用。
    第一代密码
    早期的软件系统或者互联网应用,数据库中设计用户表的时候,大致是这样的结构:
    1
    2
    3
    4
    5
    6
    7 mysql> desc User;
    ±---------±-------------±-----±----±--------±------+
    | Field | Type | Null | Key | Default | Extra |
    ±---------±-------------±-----±----±--------±------+
    | UserName | varchar(50) | NO | | | |
    | PassWord | varchar(150) | NO | | | |
    ±---------±-------------±-----±----±--------±------+
    数据存储形式如下:
    1
    2
    3
    4
    5
    6
    7 mysql> select * from User;
    ±---------±---------+
    | UserName | PassWord |
    ±---------±---------+
    | lichao | 123 |
    | akasuna | 456 |
    ±---------±---------+
    主要的关键字段就是这么两个,一个是登陆时的用户名,对应的一个密码,而且那个时候的用户名是明文存储的,如果你登陆时用户名是 123,那么数据库里存的就是 123。这种设计思路非常简单,但是缺陷也非常明显,数据库一旦泄露,那么所有用户名和密码都会泄露,后果非常严重。
    第二代密码
    为了规避第一代密码设计的缺陷,聪明的人在数据库中不在存储明文密码,转而存储加密后的密码,典型的加密算法是 MD5 和 SHA1,其数据表大致是这样设计的:
    1
    2
    3
    4
    5
    6
    7 mysql> desc User;
    ±---------±-------------±-----±----±--------±------+
    | Field | Type | Null | Key | Default | Extra |
    ±---------±-------------±-----±----±--------±------+
    | UserName | varchar(50) | NO | | | |
    | PwdHash | char(32) | NO | | | |
    ±---------±-------------±-----±----±--------±------+
    数据存储形式如下:
    1
    2
    3
    4
    5
    6
    7 mysql> select * from User;
    ±---------±---------------------------------+
    | UserName | PwdHash |
    ±---------±---------------------------------+
    | lichao | 202cb962ac59075b964b07152d234b70 |
    | akasuna | 250cf8b51c773f3f8dc8b4be867a9a02 |
    ±---------±---------------------------------+
    假如你设置的密码是 123,那么数据库中存储的就是 202cb962ac59075b964b07152d234b70 或 40bd001563085fc35165329ea1ff5c5ecbdbbeef。当用户登陆的时候,会把用户输入的密码执行 MD5(或者 SHA1)后再和数据库就行对比,判断用户身份是否合法,这种加密算法称为散列。
    严格地说,这种算法不能算是加密,因为理论上来说,它不能被解密。所以即使数据库丢失了,但是由于数据库里的密码都是密文,根本无法判断用户的原始密码,所以后果也不算太严重。
    第三代密码
    本来第二代密码设计方法已经很不错了,只要你密码设置得稍微复杂一点,就几乎没有被破解的可能性。但是如果你的密码设置得不够复杂,被破解出来的可能性还是比较大的。
    好事者收集常用的密码,然后对他们执行 MD5 或者 SHA1,然后做成一个数据量非常庞大的数据字典,然后对泄露的数据库中的密码就行对比,如果你的原始密码很不幸的被包含在这个数据字典中,那么花不了多长时间就能把你的原始密码匹配出来。这个数据字典很容易收集,CSDN 泄露的那 600w 个密码,就是很好的原始素材。
    于是,第三代密码设计方法诞生,用户表中多了一个字段:
    1
    2
    3
    4
    5
    6
    7
    8 mysql> desc User;
    ±---------±------------±-----±----±--------±------+
    | Field | Type | Null | Key | Default | Extra |
    ±---------±------------±-----±----±--------±------+
    | UserName | varchar(50) | NO | | | |
    | Salt | char(50) | NO | | | |
    | PwdHash | char(32) | NO | | | |
    ±---------±------------±-----±----±--------±------+
    数据存储形式如下:
    1
    2
    3
    4
    5
    6
    7 mysql> select * from User;
    ±---------±---------------------------±---------------------------------+
    | UserName | Salt |PwdHash |
    ±---------±---------------------------±---------------------------------+
    | lichao | 1ck12b13k1jmjxrg1h0129h2lj | 6c22ef52be70e11b6f3bcf0f672c96ce |
    | akasuna | 1h029kh2lj11jmjxrg13k1c12b | 7128f587d88d6686974d6ef57c193628 |
    ±---------±---------------------------±---------------------------------+
    Salt 可以是任意字母、数字、或是字母或数字的组合,但必须是随机产生的,每个用户的 Salt 都不一样,用户注册的时候,数据库中存入的不是明文密码,也不是简单的对明文密码进行散列,而是 MD5( 明文密码 + Salt),也就是说:
    MD5(‘123’ + ‘1ck12b13k1jmjxrg1h0129h2lj’) = ‘6c22ef52be70e11b6f3bcf0f672c96ce’
    MD5(‘456’ + ‘1h029kh2lj11jmjxrg13k1c12b’) = ‘7128f587d88d6686974d6ef57c193628’
    由于加了 Salt,即便数据库泄露了,但是由于密码都是加了 Salt 之后的散列,坏人们的数据字典已经无法直接匹配,明文密码被破解出来的概率也大大降低。
    是不是加了 Salt 之后就绝对安全了呢?淡然没有!坏人们还是可以他们数据字典中的密码,加上我们泄露数据库中的 Salt,然后散列,然后再匹配。但是由于我们的 Salt 是随机产生的,假如我们的用户数据表中有 30w 条数据,数据字典中有 600w 条数据,坏人们如果想要完全覆盖的坏,他们加上 Salt 后再散列的数据字典数据量就应该是 300000* 6000000 = 1800000000000,一万八千亿啊,干坏事的成本太高了吧。但是如果只是想破解某个用户的密码的话,只需为这 600w 条数据加上 Salt,然后散列匹配。可见 Salt 虽然大大提高了安全系数,但也并非绝对安全。
    实际项目中,Salt 不一定要加在最前面或最后面,也可以插在中间嘛,也可以分开插入,也可以倒序,程序设计时可以灵活调整,都可以使破解的难度指数级增长。

    在util工具包中创建一个PasswordUtil.java

    package cn.xdl.ovls.util;
    import java.security.MessageDigest;
    import java.util.UUID;
    public class PasswordUtil {
    	//传一个字符串过来经过md5处理返回一个字符串
    	public static String md5(String s) {
    	    try {
    	    	//MessageDigest是封装md5算法的工具对象还支持SHA算法
    	        MessageDigest md = MessageDigest.getInstance("MD5");
    	        //通过digest拿到的任意字符串,得到的bates都是等长的
    	        byte[] bytes = md.digest(s.getBytes("utf-8"));
    	        //这里输出的都是乱码
    //	        System.out.println(new String(bytes));
    	        //返回的toHex通过下面方法再处理
    	        return toHex(bytes);
    	    }
    	    catch (Exception e) {
    	        throw new RuntimeException(e);
    	    }
    	}
    	private static String toHex(byte[] bytes) {
    		//把toHex的字符串把二进制转换成十六进制
    	    final char[] HEX_DIGITS = "0123456789ABCDEF".toCharArray();
    	    StringBuilder ret = new StringBuilder(bytes.length * 2);
    	    //循环判断是为了补位操作
    	    for (int i=0; i<bytes.length; i++) {
    	        ret.append(HEX_DIGITS[(bytes[i] >> 4) & 0x0f]);
    	        ret.append(HEX_DIGITS[bytes[i] & 0x0f]);
    	    }
    	    return ret.toString();
    	}
    	public static String salt(){
    		//使用UUID通用唯一识别码,取第一个-前面的值
    		UUID uuid = UUID.randomUUID();
    		String[] arr = uuid.toString().split("-");
    		return arr[0];
    	}
    	public static void main(String[] args) {
    		System.out.println(md5("123"));
    		System.out.println(md5("1234567890"));
    		UUID uuid = UUID.randomUUID();
    		System.out.println(uuid);
    	}
    	
    }
    
    

    通过以下代码调用

    //TODO 密码加密处理
    String salt = PasswordUtil.salt();
    //通MD5加密处理
    String md5Pwd = PasswordUtil.md5(password+salt);
    //设置加密密码
    user.setPassword(md5Pwd);
    //设置盐值
    user.setSalt(salt);
    
    展开全文
  • 这里的HASH算法是密码学的基础,比较常用的有MD5和SHA,最重要的两条性质,就是不可逆和无冲突。 所谓不可逆,就是当你知道x的HASH值,无法求出x; 所谓无冲突,就是当你知道x,无法求出一个y, 使x与y的HASH值...
  • base64/md5/RSA/SHA1等加密算法Java实现,附jar包,供学习参考使用
  • ## 说明 此程序可以进行sha1,sha256,md5加密 在input输入框内输入所需加密的数据,然后点击"encryption"按扭即可实现加密; 默认input输入框内的数据为123456
  • RSAMD5、AES加密算法

    2020-10-24 09:39:49
    加密算法,可以分可逆加密,不可逆加密(MD5),可逆加密又分为对称加密与非对称加密,比如大家经常听说的RSA算法就是一种非对称加密算法 不可逆加密(MD5):只能加密,不能解密,任何数据都能加密成16字节,不太...
  • MD5加密算法

    万次阅读 2017-09-20 16:43:01
    MD5的全称是Message-Digest Algorithm 5(信息-摘要算法),在90年代初由MIT Laboratory for Computer Science和RSA Data Security Inc的Ronald L....MD5加密算法:http://blog.csdn.net/huangxiaoguo1/artic
  • RSA内部有两个版本可以参考。供大家学习使用。RSAeuroVersion1.1以及RSAVersion1.0 只是源码有些许不一样。
  • python MD5加密的示例

    2020-12-16 21:28:06
    MD5即Message-Digest Algorithm 5(信息-摘要算法5),用于确保信息传输完整一致。是计算机广泛使用的杂凑算法之一(又译摘要算法、哈希算法),主流编程语言普遍已有MD5实现。将数据(如汉字)运算为另一固定

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 30,453
精华内容 12,181
关键字:

md5加密rsa加密算法和