zoukankan      html  css  js  c++  java
  • C++加密解密库之选择

    项目中有这样一个需求,客户端登陆服务器时,为保证信息安全,需要对用户的密码进行加密传输,在服务器端接受到之后进行相应的解密。

    一、加密算法分类

    对称加密算法、不对称加密算法、不可逆加密算法

    1、对称加密算法

    特点:较早、技术成熟
    原理:
    数据发信方将明文和加密秘钥一起经过特殊加密算法处理后,使其变成复杂的加密密文发送出去;收信方收到密文后,若想解读原文,则需要使用加密用过的密钥及相同算法的逆算法对密文进行解密,才能恢复成可读明文。在对称加密算法中,使用的密钥只有一个,发收信双发都使用这个密钥对数据进行加密和解密,这就要求解密方事先必须知道加密密钥。
    技术特点:
    算法公开、计算量小、加密速度快、加密效率高。
    不足之处是:交易双发使用相同密钥,安全性得不到保证。此外,每对用户都需要使用被人不知道的唯一的密钥,这会使得密钥管理非常困难。对称加密算法在分布式网络上使用较为困难;在专用网中广泛使用的加密算法有DES、IDEA等。AES
    DES、IDEA

    2、不对称加密算法

    特点:
    原理:
    不对称加密算法使用两把完全不同但是又是完全匹配的以对钥匙--公钥和私钥。在使用不对称加密算法加密文件时只有匹配的一对公钥和私钥才能完成对明文的加密和解密过程。加密明文时采用公钥加密,解密密文时使用私钥解密,而且发信方知道收信方的公钥,只有收信方才知道自己的私钥。
    技术特点:
    基本原理是:如果发信方想发送只有收信方才能解读的加密信息,发信方必须首先知道收信方的公钥,然后利用收信方的公钥来加密原文;收信方收到加密密文后,使用自己的私钥才能解密密文。显然,采用不对称加密算法,收发信双方在通信之前,收信方必须将自己早已随机生成的公钥送给发信方,而自己保留私钥。由于不对称算法拥有两个密钥,因而特别适用于分布式系统中的数据加密。
    RSA、DSA

    3、不可逆加密算法

    不可逆加密算法的特征是加密过程中不需要使用密钥,输入明文后由系统直接经过加密算法处理成密文,这种加密后的数据是无法被解密的,只有重新输入明文,并再次经过同样不可逆的加密算法处理,得到相同的加密密文并被系统重新识别后,才能真正解密。显然,在这类加密过程中,加密是自己,解密还得是自己,而所谓解密,实际上就是重新加一次密,所应用的“密码”也就是输入的明文。不可逆加密算法不存在密钥保管和分发问题,非常适合在分布式网络系统上使用,但因加密计算复杂,工作量相当繁重,通常只在数据量有限的情形下使用,如广泛应用在计算机系统中的口令加密,利用的就是不可逆加密算法。近年来,随着计算机系统性能的不断提高,不可逆加密的应用领域正在逐渐增大。在计算机网络中应用较多不可逆加密算法的有RSA公司发明的MD5算法和由美国国家标准局建议的不可逆加密标准SHS(Secure Hash Standard:安全杂乱信息标准)等

    二、主要的C++算法库

    1、OpenSSL

    openssl现在的状态不佳,自从心脏出血事件之后,可谓是墙倒众人推,网上也有好多人说它的代码写的很差,没有良好的代码规范,基于这些理由,又是项目中使用的,所以,还是不去冒这个险了。

    2、Crypto++

    这个库在网上的评价还算不错的,支持多种加密算法

    3、Botan

    这个库没有太多的了解,也仅仅是刚知道,也是支持多种加密算法的

    4、Cryptlib

    了解不多,暂不做评论

    三、选择

    这里暂时选择Cryto++这个库,选择这个库主要是因为现在手头找到的关于它的资料文档最多,容易快速上手。别的就待以后再去接触吧。

    选择这个库,使用它提供的aes256算法来实现上面的需求。

  • 相关阅读:
    *** mixed implicit and normal rules: deprecated syntax
    cold boot and warm boot.
    git打补丁命令
    LSB和MSB
    __attribute__((weak)) ------ 关于弱符号的用法
    键盘和鼠标无法热插拔问题
    yocto编译加速及单独编译内核与uboot
    V4L2学习教程
    linux错误码
    linux内核面试常见试题
  • 原文地址:https://www.cnblogs.com/lit10050528/p/4080580.html
Copyright © 2011-2022 走看看