zoukankan      html  css  js  c++  java
  • 几种常用的密码加密算法以及选用

    原链接:http://www.cnblogs.com/yangywyangyw/archive/2012/07/31/2620861.html

    加 密算法通常分为对称性加密算法和非对称性加密算法,对于对称性加密算法,信息接收双方都需事先知道密匙和加解密算法且其密匙是相同的,之后便是对数据进行 加解密了。非对称算法与之不同,发送双方A,B事先均生成一堆密匙,然后A将自己的公有密匙发送给B,B将自己的公有密匙发送给A,如果A要给B发送消 息,则先需要用B的公有密匙进行消息加密,然后发送给B端,此时B端再用自己的私有密匙进行消息解密,B向A发送消息时为同样的道理。

    几种对称性加密算法:AES,DES,3DES

    DES是一种分组数据加密技术(先将数据分成固定长度的小数据块,之后进行加密),速度较快,适用于大量数据加密,而3DES是一种基于DES的加密算法,使用3个不同密匙对同一个分组数据块进行3次加密,如此以使得密文强度更高。

    相较于DES和3DES算法而言,AES算法有着更高的速度和资源使用效率,安全级别也较之更高了,被称为下一代加密标准。

    几种非对称性加密算法:RSA,DSA,ECC

    RSA和DSA的安全性及其它各方面性能都差不多,而ECC较之则有着很多的性能优越,包括处理速度,带宽要求,存储空间等等。

    几种线性散列算法(签名算法):MD5,SHA1,HMAC

    这几种算法只生成一串不可逆的密文,经常用其效验数据传输过程中是否经过修改,因为相同的生成算法对于同一明文只会生成唯一的密文,若相同算法生成的密文不同,则证明传输数据进行过了修改。通常在数据传说过程前,使用MD5和SHA1算法均需要发送和接收数据双方在数据传送之前就知道密匙生成算法,而HMAC与之不同的是需要生成一个密匙,发送方用此密匙对数据进行摘要处理(生成密文),接收方再利用此密匙对接收到的数据进行摘要处理,再判断生成的密文是否相同。

    对于各种加密算法的选用:

    由于对称加密算法的密钥管理是一个复杂的过程,密钥的管理直接决定着他的安全性,因此当数据量很小时,我们可以考虑采用非对称加密算法。

    在实际的操作过程中,我们通常采用的方式是:采用非对称加密算法管理对称算法的密钥,然后用对称加密算法加密数据,这样我们就集成了两类加密算法的优点,既实现了加密速度快的优点,又实现了安全方便管理密钥的优点。

    如果在选定了加密算法后,那采用多少位的密钥呢?一般来说,密钥越长,运行的速度就越慢,应该根据的我们实际需要的安全级别来选择,一般来说,RSA建议采用1024位的数字,ECC建议采用160位,AES采用128为即可。

    对于几种加密算法的内部实现原理,我不想研究的太透彻,这些问题就留给科学家们去研究吧。而对于其实现而言,网上有很多开源版本,比较经典的是PorlaSSL(官网:http://en.wikipedia.org/wiki/PolarSSL )。其它语言如JAVA,OBJC也都有相应的类库可以使用。以下附上自己用OC封装的通用加密类:

    RSA

    https://www.cnblogs.com/techliang666/p/9164855.html

    下载openssl.zip

    1. 生成原始 RSA私钥文件 private_key.pem

    openssl genrsa -out private_key.pem 1024

    2. 将原始 RSA私钥转换为 pkcs8格式

    openssl pkcs8 -topk8 -inform PEM -in private_key.pem -outform PEM -nocrypt -out rsa_private_key.pem

    3. 生成 RSA公钥 rsa_public_key.pem

    openssl rsa -in private_key.pem -pubout -out rsa_public_key.crt

    4. 从公钥 rsa_public_key.pem 获取十六进制的公钥(第一段16进制字符串)

    openssl asn1parse -out temp.ans -i -inform PEM<private_key.pem

    最终获取文件列表:

    rsa_private_key.pem

    rsa_public_key.crt

    16进制公钥字符串用于js端加密

  • 相关阅读:
    Ios 从无到有项目 MVVM模式(两)
    国外论文搜索
    memcpy的使用方法总结
    简单工厂模式
    curl命令具体解释
    java.lang.Math中的基本方法
    海量数据处理面试题集锦
    BEGINNING SHAREPOINT&#174; 2013 DEVELOPMENT 文件夹
    TinyXml高速入门(一)
    Android SDK 2.2 离线安装
  • 原文地址:https://www.cnblogs.com/jiangxiaobo/p/13793851.html
Copyright © 2011-2022 走看看