精华内容
下载资源
问答
  • 安全加密技术】 对称加密

    千次阅读 2015-07-09 22:28:36
     上篇了解了《非对称加密》后 今天我来继续了解下加密技术中对称... 对称加密是传统的加密方式,比上非对称加密,缺少安全性,但是它依旧是用的比较多的加密方法。  对称加密采用单密钥加密方式,不论是加密还是

        转载请注明出处:http://blog.csdn.net/sk719887916/article/details/46822663

          上篇了解了《非对称加密》后 今天我来继续了解下加密技术中对称加密。


      对称加密

          对称加密是最传统的加密方式,比上非对称加密,缺少安全性,但是它依旧是用的比较多的加密方法。

          对称加密采用单密钥加密方式,不论是加密还是解密都是用同一个密钥,即“一把钥匙开一把锁”。对称加密的好处在于操作简单、管理方便、速度快。它的缺点在于密钥在

    网络传输中容易被窃听,每个密钥只能应用一次,对密钥管理造成了困难。对称加密的实现形式和加密算法的公开性使它依赖于密钥的安全性,而不是算法的安全性。


      对称加密原理以及对称加密算法 



         对称加密的核心——通信双方共享一个密钥 通信过程:  A有明文m,使用加密算法E,密钥key,生成密文c=E(key,m); B收到密文c,使用解密算法D,密钥key,得到明文

    m=D(key,c);    比喻:  对称加密是最直观,也是历史最久远的加密手段,类似于加锁和解锁,只不过钥匙的个数非常多(~~2^100),一个人穷其一生也试不完所有可能的钥匙

    因此加密密钥能够从解密密钥中推算出来,同时解密密钥也可以从加密密钥中推算出来。而在大多数的对称算法中,加密密钥和解密密钥是相同的,所以也称这种加密算法为秘

    密密钥算法或单密钥算法。它要求发送方和接收方在安全通信之前,商定一个密钥。对称算法的安全性依赖于密钥,泄漏密钥就意味着任何人都可以对他们发送或接收的消息解

    密,所以密钥的保密性对通信性至关重要。

        主要加密算法

        上篇文章中就列举了几种关于对称加密算法,主要有DES算法,3DES算法,TDEA算法,Blowfish算法,RC5算法,IDEA算法。

          DES算法

          des算法把64位的明文输入块变为数据长度为64位的密文输出块,其中8位为奇偶校验位,另外56位作为密码的长度。首先,DES把输入的64位数据块按位重新组合,并把输出分为L0、R0两部分,每部分各长32位,并进行前后置换,最终由L0输出左32位,R0输出右32位,根据这个法则经过16次迭代运算后,得到L16、R16,将此作为输入,进行与初始置换相反的逆置换,即得到密文输出。DES算法具有极高的安全性,到目前为止,除了用穷举搜索法对DES算法进行攻击外,还没有发现更有效的办法,而56位长密钥的穷举空间为256,这意味着如果一台计算机的速度是每秒种检测100万个密钥,那么它搜索完全部密钥就需要将近2285年的时间,因此DES算法是一种很可靠的加密方法。


        RC4算法

        RC4算法的原理是“搅乱”,它包括初始化算法和伪随机子密码生成算法两大部分,在初始化的过程中,密钥的主要功能是将一个256字节的初始数簇进行随机搅乱,不同的数簇在经过伪随机子密码生成算法的处理后可以得到不同的子密钥序列,将得到的子密钥序列和明文进行异或运算(XOR)后,得到密文。
    由于RC4算法加密采用的是异或方式,所以,一旦子密钥序列出现了重复,密文就有可能被破解,但是目前还没有发现密钥长度达到128位的RC4有重复的可能性,所以,RC4也是目前最安全的加密算法之一。


     既然说到对称加密 那么这里也稍微提及一下向加密算法


         基本的单向加密算法: 


        MD5(Message Digest algorithm 5,信息摘要算法


        BASE64 严格地说,属于编码格式,而非加密算法

       SHA(Secure Hash Algorithm,安全散列算法)


       HMAC(Hash Message Authentication Code,散列消息鉴别码


      代码示列:


    1. public abstract class Coder {  
    2.     public static final String KEY_SHA = "SHA";  
    3.     public static final String KEY_MD5 = "MD5";  
    4.   
    5.     /** 
    6.      * MAC算法可选以下多种算法 .
    7.      *  
    8.      * <pre> 
    9.      * HmacMD5  
    10.      * HmacSHA1  
    11.      * HmacSHA256  
    12.      * HmacSHA384  
    13.      * HmacSHA512 
    14.      * </pre> 
    15.      */  
    16.     public static final String KEY_MAC = "HmacMD5";  
    17.   
    18.     /** 
    19.      * BASE64解密 .
    20.      *  
    21.      * @param key 
    22.      * @return 
    23.      * @throws Exception 
    24.      */  
    25.     public static byte[] decryptBASE64(String key) throws Exception {  
    26.         return (new BASE64Decoder()).decodeBuffer(key);  
    27.     }  
    28.   
    29.     /** 
    30.      * BASE64加密 .
    31.      *  
    32.      * @param key 
    33.      * @return 
    34.      * @throws Exception 
    35.      */  
    36.     public static String encryptBASE64(byte[] key) throws Exception {  
    37.         return (new BASE64Encoder()).encodeBuffer(key);  
    38.     }  
    39.   
    40.     /** 
    41.      * MD5加密 .
    42.      *  
    43.      * @param data 
    44.      * @return 
    45.      * @throws Exception 
    46.      */  
    47.     public static byte[] encryptMD5(byte[] data) throws Exception {  
    48.   
    49.         MessageDigest md5 = MessageDigest.getInstance(KEY_MD5);  
    50.         md5.update(data);  
    51.   
    52.         return md5.digest();  
    53.   
    54.     }  
    55.   
    56.     /** 
    57.      * SHA加密 .
    58.      *  
    59.      * @param data 
    60.      * @return 
    61.      * @throws Exception 
    62.      */  
    63.     public static byte[] encryptSHA(byte[] data) throws Exception {  
    64.   
    65.         MessageDigest sha = MessageDigest.getInstance(KEY_SHA);  
    66.         sha.update(data);  
    67.   
    68.         return sha.digest();  
    69.   
    70.     }  
    71.   
    72.     /** 
    73.      * 初始化HMAC密钥 
    74.      *  
    75.      * @return.
    76.      * @throws Exception 
    77.      */  
    78.     public static String initMacKey() throws Exception {  
    79.         KeyGenerator keyGenerator = KeyGenerator.getInstance(KEY_MAC);  
    80.   
    81.         SecretKey secretKey = keyGenerator.generateKey();  
    82.         return encryptBASE64(secretKey.getEncoded());  
    83.     }  
    84.   
    85.     /** 
    86.      * HMAC加密 .
    87.      *  
    88.      * @param data 
    89.      * @param key 
    90.      * @return 
    91.      * @throws Exception 
    92.      */  
    93.     public static byte[] encryptHMAC(byte[] data, String key) throws Exception {  
    94.   
    95.         SecretKey secretKey = new SecretKeySpec(decryptBASE64(key), KEY_MAC);  
    96.         Mac mac = Mac.getInstance(secretKey.getAlgorithm());  
    97.         mac.init(secretKey);  
    98.   
    99.         return mac.doFinal(data);  
    100.   
    101.     }  
    102. }  


    加密模式

     

      ECB:最基本的加密模式,也就是通常理解的加密,相同的明文将永远加密成相同的密文,无初始向量,容易受到密码本重放攻击,一般情况下很少用。


      CBC:明文被加密前要与前面的密文进行异或运算后再加密,因此只要选择不同的初始向量,相同的密文加密后会形成不同的密文,这是目前应用最广泛的模式。CBC加密后的密文是上下文相关的,但明文的错误不会传递到后续分组,但如果一个分组丢失,后面的分组将全部作废(同步错误)。


      CFB:类似于自同步序列密码,分组加密后,按8位分组将密文和明文进行移位异或后得到输出同时反馈回移位寄存器,优点最小可以按字节进行加解密,也可以是n位的,CFB也是上下文相关的,CFB模式下,明文的一个错误会影响后面的密文(错误扩散)。


       OFB:将分组密码作为同步序列密码运行,和CFB相似,不过OFB用的是前一个n位密文输出分组反馈回移位寄存器,OFB没有错误扩散问题。


       对称加密和非对称加密区别


          非对称加密与对称加密相比,其安全性大大提高好:对称加密的通信双方使用相同的秘钥,如果一方的秘钥遭泄露,那么整个通信就会被破解。而非对称加密使用一对秘钥,一个用来加密,一个用来解密,而且公钥是公开的,秘钥是自己保存的,不需要像对称加密那样在通信之前要先同步秘钥。但是非对称加密的缺点是加密和解密花费时间长、速度慢,只适合对少量数据进行加密。因此实际项目开发中我们需要根据需求场景合理选取加密方式,一般的对称加密足已满足我们的需要。


    展开全文
  • 5种用户密码加密方式,哪种最安全

    千次阅读 2021-01-19 11:17:20
    作为互联网公司的信息安全从业人员经常要处理撞库扫号事件(撞库是黑客无聊的“恶作剧”,黑客通过收集互联网已泄露的用户+密码信息,生成对应的字典表,尝试批量登陆其他网站后,得到一系列可以登陆的用户),产生撞...

    作为互联网公司的信息安全从业人员经常要处理撞库扫号事件(撞库是黑客无聊的“恶作剧”,黑客通过收集互联网已泄露的用户+密码信息,生成对应的字典表,尝试批量登陆其他网站后,得到一系列可以登陆的用户),产生撞库扫号的根本原因是一些企业发生了信息泄露事件,且这些泄露数据未加密或者加密方式比较弱,导致黑客可以还原出原始的用户密码。

    以京东之前的撞库举例,首先京东的数据库并没有泄漏。黑客只不过通过“撞库”的手法,“凑巧”获取到了一些京东用户的数据(用户名密码),而这样的手法,几乎可以对付任何网站登录系统,用户在不同网站登录时使用相同的用户名和密码,就相当于给自己配了一把“万能钥匙”,一旦丢失,后果可想而知。

    今天主要分别介绍用户密码的加密方式以及主要的破解方法。

    彩虹表:如果将哈希后的密文比作一把锁,暴力破解的方法就是现场制作各种各样不同齿形的钥匙,再来尝试能否开锁,这样耗时无疑很长;我以前错误理解的“彩虹表”,是事先制作好所有齿形的钥匙,全部拿过来尝试开锁,这样虽然省去了制作钥匙的时间,但是后来发现这些钥匙实在是太多了,没法全部带在身上。而真正的彩虹表,是将钥匙按照某种规律进行分组,每组钥匙中只需要带最有特点的一个,当发现某个“特征钥匙”差一点就能开锁了,则当场对该钥匙进行简单的打磨,直到能开锁为止。这种方法是既省力又省时的。

     

    用户密码加密方式

    用户密码保存到数据库时,常见的加密方式有哪些?以下几种方式是常见的密码保存方式:

    1. 明文保存

    比如用户设置的密码是“123456”,直接将“123456”保存在数据库中,这种是最简单的保存方式,也是最不安全的方式。但实际上不少互联网公司,都可能采取的是这种方式。

    2. 对称加密算法来保存

    比如3DES、AES等算法,使用这种方式加密是可以通过解密来还原出原始密码的,当然前提条件是需要获取到密钥。不过既然大量的用户信息已经泄露了,密钥很可能也会泄露,当然可以将一般数据和密钥分开存储、分开管理,但要完全保护好密钥也是一件非常复杂的事情,所以这种方式并不是很好的方式。

    3. MD5、SHA1等单向HASH算法

    使用这些算法后,无法通过计算还原出原始密码,而且实现比较简单,因此很多互联网公司都采用这种方式保存用户密码,曾经这种方式也是比较安全的方式,但随着彩虹表技术的兴起,可以建立彩虹表进行查表破解,目前这种方式已经很不安全了。

    其实之前公司也是采用的这种MD5加密方式。

     

    4. PBKDF2算法

    该算法原理大致相当于在HASH算法基础上增加随机盐,并进行多次HASH运算,随机盐使得彩虹表的建表难度大幅增加,而多次HASH也使得建表和破解的难度都大幅增加。

    在使用PBKDF2算法时,HASH一般会选用sha1或者sha256,随机盐的长度一般不能少于8字节,HASH次数至少也要1000次,这样安全性才足够高。一次密码验证过程进行1000次HASH运算,对服务器来说可能只需要1ms,但对于破解者来说计算成本增加了1000倍,而至少8字节随机盐,更是把建表难度提升了N个数量级,使得大批量的破解密码几乎不可行,该算法也是美国国家标准与技术研究院推荐使用的算法。

    5. bcrypt、scrypt等算法

    这两种算法也可以有效抵御彩虹表,使用这两种算法时也需要指定相应的参数,使破解难度增加。

    在密码学中,scrypt(念作“ess crypt”)是Colin Percival于2009年所发明的金钥推衍函数,当初设计用在他所创立的Tarsnap服务上。设计时考虑到大规模的客制硬件攻击而刻意设计需要大量内存运算。

    Scrypt不仅计算所需时间长,而且占用的内存也多,使得并行计算多个摘要异常困难,因此利 用rainbow table进行暴力攻击更加困难。Scrypt 没有在生产环境中大规模应用,并且缺乏仔细的审察和广泛的函数库支持。但是,Scrypt 在算法层面只要没有破绽,它的安全性应该高于PBKDF2和bcrypt。

     

    各个算法的特性

     

    总结

    采用PBKDF2、bcrypt、scrypt等算法可以有效抵御彩虹表攻击,即使数据泄露,最关键的“用户密码”仍然可以得到有效的保护,黑客无法大批量破解用户密码,从而切断撞库扫号的根源。

    展开全文
  • 目前常见的邮件加密方式

    千次阅读 2014-09-05 09:35:39
    第一种:利用对称加密算法加密邮件  对称加密算法是应用较早的加密算法,技术成熟。在对称加密算法中,数据发信方将明文(原始数据)和加密密钥一起经过特殊加密算法处理后,使其变成复杂的加密密文发送出去。收信...

    第一种:利用对称加密算法加密邮件  
    对称加密算法是应用较早的加密算法,技术成熟。在对称加密算法中,数据发信方将明文(原始数据)和加密密钥一起经过特殊加密算法处理后,使其变成复杂的加密密文发送出去。收信方收到密文后,若想解读原文,则需要使用加密用过的密钥及相同算法的逆算法对密文进行解密,才能使其恢复成可读明文。在对称加密算法中,使用的密钥只有一个,发收信双方都使用这个密钥对数据进行加密和解密,这就要求解密方事先必须知道加密密钥。对称加密算法的特点是算法公开、计算量小、加密速度快、加密效率高。不足之处是,交易双方都使用同样钥匙,安全性得不到保证。利用对称密码算法对电子邮件进行加密,需要解决密码的传递,保存、交换。这种方式的邮件加密系统目前很少使用。  
    典型基于对称加密的邮件加密产品:Office口令加密,PDF口令加密、WinRAR口令加密、WinZip口令加密。(这种方式用于电子邮件加密上只能用于加密附件)。

    第二种:利用传统非对称密钥体系(PKI/CA)加密电子邮件  
    电子邮件加密系统目前大部分产品都是基于这种加密方式。PKI(Public Key Infrastructure)指的是公钥基础设施, CA(Certificate Authority)指的是认证中心。PKI从技术上解决了网络通信安全的种种障碍;CA从运营、管理、规范、法律、人员等多个角度来解决了网络信任问题。由此,人们统称为“PKI/CA”。从总体构架来看,PKI/CA主要由最终用户、认证中心和注册机构来组成。 PKI/CA的工作原理就是通过发放和维护数字证书来建立一套信任网络,在同一信任网络中的用户通过申请到的数字证书来完成身份认证和安全处理。  
    注册中心负责审核证书申请者的真实身份,在审核通过后,负责将用户信息通过网络上传到认证中心,由认证中心负责最后的制证处理。证书的吊销、更新也需要由注册机构来提交给认证中心做处理。总的来说,认证中心是面向各注册中心的,而注册中心是面向最终用户的,注册机构是用户与认证中心的中间渠道。公钥证书的管理是个复杂的系统。一个典型、完整、有效的CA系统至少应具有以下部分:公钥密码证书管理;黑名单的发布和管理;密钥的备份和恢复;自动更新密钥;历史密钥管理;支持交叉认证,等等。PKI/CA认证体系相对成熟但应用于电子邮件加密系统时也存在着密匙管理复杂,需要先交换密匙才能进行加解密操作等,著名的电子邮件加密系统PGP就是采用这套加密流程进行加密。这种加密方法只适用于企业、单位和一些高端用户,由于CA证书获得麻烦,交换繁琐,因此这种电子邮件加密模式一直很难普及。   
    典型基于PKI/CA的邮件加密产品: 沃通电子邮件加密证书超酷个人证书, 超真单位证书

    第三种:利用链式加密体系进行电子邮件加密  
    这种机制以一个随机生成的密钥(每次加密不一样),再用对称加密算法(如3DES、IDEA算法)对明文加密,然后用RSA非对称算法对该密钥加密。这样收件人同样是用RSA解出这个随机密钥,再用对称加密算法解密邮件本身。这样的链式加密就做到了既有RSA体系的保密性,又有对称加密算法的快捷性。此外,链式加密体系的密钥管理由用户自己管理,公钥的交换基于信任机制。如:假设A想要获得B的公开密钥,可以采取几种方法,包括拷贝给A、通过电话验证公开密钥是否正确、从双方都信任的人C那里获得、从认证中心获得等。这样,用户的电子邮件就是非常安全的。  
    典型基于链式加密体系邮件加密产品:PGP、MailCloak(电子邮封)  

    第四种:利用基于身份的密码技术进行电子邮件加密  
    为简化传统公钥密码系统的密钥管理问题,1984年,以色列科学家、著名的RSA体制的发明者之一A. Shamir提出基于身份密码的思想:将用户公开的身份信息(如e-mail地址,IP地址,名字……,等等)作为用户公钥,用户私钥由一个称为私钥生成者的可信中心生成。在随后的二十几年中,基于身份密码体制的设计成为密码学界的一个热门的研究领域。但是由于在此机制下,用户的密钥都是在服务器端托管,用户的信息安全安全性还要依赖于服务器安全及服务提供商的承诺。



    展开全文
  • 常见加密方式和Python实现

    千次阅读 2018-07-28 17:42:08
    我们所说的加密方式,都是对二进制编码的格式进行加密的,对应到Python中,则是我们的Bytes。 所以当我们在Python中进行加密操作的时候,要确保我们操作的是Bytes,否则就会报错。 将字符串和Bytes互相转换可以...

    前言

    我们所说的加密方式,都是对二进制编码的格式进行加密的,对应到Python中,则是我们的Bytes

    所以当我们在Python中进行加密操作的时候,要确保我们操作的是Bytes,否则就会报错。

    将字符串和Bytes互相转换可以使用encode()decode()方法。如下所示:

    # 方法中不传参数则是以默认的utf-8编码进行转换
    In [1]: '南北'.encode()
    Out[1]: b'\xe5\x8d\x97\xe5\x8c\x97'
    ​
    In [2]: b'\xe5\x8d\x97\xe5\x8c\x97'.decode()
    Out[2]: '南北'
    

    注:两位十六进制常常用来显示一个二进制字节。

    利用binascii模块可以将十六进制显示的字节转换成我们在加解密中更常用的显示方式:

    In [1]: import binascii
    ​
    In [2]: '南北'.encode()
    Out[2]: b'\xe5\x8d\x97\xe5\x8c\x97'
    ​
    In [3]: binascii.b2a_hex('南北'.encode())
    Out[3]: b'e58d97e58c97'
    ​
    In [4]: binascii.a2b_hex(b'e58d97e58c97')
    Out[4]: b'\xe5\x8d\x97\xe5\x8c\x97'
    ​
    In [5]: binascii.a2b_hex(b'e58d97e58c97').decode()
    Out[5]: '南北'
    

    URL编码

    简介

    正常的URL中是只能包含ASCII字符的,也就是字符、数字和一些符号。而URL编码就是一种浏览器用来避免url中出现特殊字符(如汉字)的编码方式。

    其实就是将超出ASCII范围的字符转换成带%的十六进制格式。

    Python实现

    In [1]: from urllib import parse
    ​
    # quote()方法会自动将str转换成bytes,所以这里传入str和bytes都可以
    In [2]: parse.quote('南北')
    Out[2]: '%E5%8D%97%E5%8C%97'
    ​
    In [3]: parse.unquote('%E5%8D%97%E5%8C%97')
    Out[3]: '南北'
    

    Base64编码

    简述

    Base64是一种用64个字符来表示任意二进制数据的方法。

    Base64编码可以成为密码学的基石。可以将任意的二进制数据进行Base64编码。所有的数据都能被编码为并只用65个字符就能表示的文本文件。( 65字符:A~Z a~z 0~9 + / = )编码后的数据~=编码前数据的4/3,会大1/3左右。

    Base64编码的原理

    1. 将所有字符转化为ASCII码。

    2. 将ASCII码转化为8位二进制 。

    3. 将二进制3个归成一组(不足3个在后边补0)共24位,再拆分成4组,每组6位。

    4. 统一在6位二进制前补两个0凑足8位。

    5. 将补0后的二进制转为十进制。

    6. 从Base64编码表获取十进制对应的Base64编码。

    Base64编码的说明

    1. 转换的时候,将三个byte的数据,先后放入一个24bit的缓冲区中,先来的byte占高位。

    2. 数据不足3byte的话,于缓冲区中剩下的bit用0补足。然后,每次取出6个bit,按照其值选择查表选择对应的字符作为编码后的输出。

    3. 不断进行,直到全部输入数据转换完成。

    4. 如果最后剩下两个输入数据,在编码结果后加1个“=”。

    5. 如果最后剩下一个输入数据,编码结果后加2个“=”。

    6. 如果没有剩下任何数据,就什么都不要加,这样才可以保证资料还原的正确性。

    Python的Base64使用

    Python内置的base64模块可以直接进行base64的编解码

    注意:用于base64编码的,要么是ASCII包含的字符,要么是二进制数据

    In [1]: import base64
    ​
    In [2]: base64.b64encode(b'hello world')
    Out[2]: b'aGVsbG8gd29ybGQ='
    ​
    In [3]: base64.b64decode(b'aGVsbG8gd29ybGQ=')
    Out[3]: b'hello world'
    

    MD5(信息-摘要算法)

    简述

    message-digest algorithm 5(信息-摘要算法)。经常说的“MD5加密”,就是它→信息-摘要算法。

    md5,其实就是一种算法。可以将一个字符串,或文件,或压缩包,执行md5后,就可以生成一个固定长度为128bit的串。这个串,基本上是唯一的。

    不可逆性

    每个人都有不同的指纹,看到这个人,可以得出他的指纹等信息,并且唯一对应,但你只看一个指纹,是不可能看到或读到这个人的长相或身份等信息。

    特点

    1. 压缩性:任意长度的数据,算出的MD5值长度都是固定的。

    2. 容易计算:从原数据计算出MD5值很容易。

    3. 抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大区别。

    4. 强抗碰撞:已知原数据和其MD5值,想找到一个具有相同MD5值的数据(即伪造数据)是非常困难的。

    举个栗子:世界上只有一个我,但是但是妞却是非常非常多的,以一个有限的我对几乎是无限的妞,所以可能能搞定非常多(100+)的妞,这个理论上的确是通的,可是实际情况下....

    Python的MD5使用

    由于MD5模块在python3中被移除,在python3中使用hashlib模块进行md5操作

    import hashlib
    ​
    # 待加密信息
    str = '这是一个测试'
    ​
    # 创建md5对象
    hl = hashlib.md5()
    ​
    # 此处必须声明encode
    # 若写法为hl.update(str)  报错为: Unicode-objects must be encoded before hashing
    hl.update(str.encode(encoding='utf-8'))
    ​
    print('MD5加密前为 :' + str)
    print('MD5加密后为 :' + hl.hexdigest())
    

    运行结果

    MD5加密前为 :这是一个测试
    MD5加密后为 :cfca700b9e09cf664f3ae80733274d9f
    

    MD5长度

    md5的长度,默认为128bit,也就是128个0和1的二进制串。这样表达是很不友好的。所以将二进制转成了16进制,每4个bit表示一个16进制,所以128/4 = 32 换成16进制表示后,为32位了。

    为什么网上还有md5是16位的呢?

    其实16位的长度,是从32位md5值来的。是将32位md5去掉前八位,去掉后八位得到的。

    Python加密库PyCryptodome

    PyCrypto是 Python 中密码学方面最有名的第三方软件包。可惜的是,它的开发工作于2012年就已停止。

    幸运的是,有一个该项目的分支PyCrytodome 取代了 PyCrypto 。

    安装与导入

    安装之前需要先安装Microsoft Visual c++ 2015

    在Linux上安装,可以使用以下 pip 命令:

    pip install pycryptodome
    

    导入:

    import Crypto
    

    在Windows 系统上安装则稍有不同:

    pip install pycryptodomex
    

    导入:

    import Cryptodome
    

    DES

    简介

    DES算法为密码体制中的对称密码体制,又被称为美国数据加密标准。

    DES是一个分组加密算法,典型的DES以64位为分组对数据加密,加密和解密用的是同一个算法。

    DES算法的入口参数有三个:Key、Data、Mode。其中Key为7个字节共56位,是DES算法的工作密钥;Data为8个字节64位,是要被加密或被解密的数据;Mode为DES的工作方式,有两种:加密或解密。

    密钥长64位,密钥事实上是56位参与DES运算(第8、16、24、32、40、48、56、64位是校验位,使得每个密钥都有奇数个1),分组后的明文组和56位的密钥按位替代或交换的方法形成密文组。

    3DES

    简介

    3DES(或称为Triple DES)是三重数据加密算法(TDEA,Triple Data Encryption Algorithm)块密码的通称。它相当于是对每个数据块应用三次DES加密算法。

    由于计算机运算能力的增强,原版DES密码的密钥长度变得容易被暴力破解。3DES即是设计用来提供一种相对简单的方法,即通过增加DES的密钥长度来避免类似的攻击,而不是设计一种全新的块密码算法。

    3DES(即Triple DES)是DES向AES过渡的加密算法(1999年,NIST将3-DES指定为过渡的加密标准),加密算法,其具体实现如下:设Ek()和Dk()代表DES算法的加密和解密过程,K代表DES算法使用的密钥,M代表明文,C代表密文,这样:

    3DES加密过程为:C=Ek3(Dk2(Ek1(M)))

    3DES解密过程为:M=Dk1(EK2(Dk3(C)))

    AES

    简介

    高级加密标准(英语:Advanced Encryption Standard,缩写:AES),在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。经过五年的甄选流程,高级加密标准由美国国家标准与技术研究院(NIST)于2001年11月26日发布于FIPS PUB 197,并在2002年5月26日成为有效的标准。2006年,高级加密标准已然成为对称密钥加密中最流行的算法之一。

    AES在软件及硬件上都能快速地加解密,相对来说较易于实作,且只需要很少的存储器。作为一个新的加密标准,目前正被部署应用到更广大的范围。

    特点与思想

    1. 抵抗所有已知的攻击。

    2. 在多个平台上速度快,编码紧凑。

    3. 设计简单。

    详解

    AES为分组密码,分组密码也就是把明文分成一组一组的,每组长度相等,每次加密一组数据,直到加密完整个明文。在AES标准规范中,分组长度只能是128位,也就是说,每个分组为16个字节(每个字节8位)。密钥的长度可以使用128位、192位或256位。密钥的长度不同,推荐加密轮数也不同。

    一般常用的是128位

    Python实现

    from Cryptodome.Cipher import AES
    from Cryptodome import Random
    from binascii import b2a_hex 
    ​
    # 要加密的明文
    data = '南来北往'
    # 密钥key 长度必须为16(AES-128)、24(AES-192)、或32(AES-256)Bytes 长度.
    # 目前AES-128足够用
    key = b'this is a 16 key'
    # 生成长度等于AES块大小的不可重复的密钥向量
    iv = Random.new().read(AES.block_size)
    ​
    # 使用key和iv初始化AES对象, 使用MODE_CFB模式
    mycipher = AES.new(key, AES.MODE_CFB, iv)
    # 加密的明文长度必须为16的倍数,如果长度不为16的倍数,则需要补足为16的倍数
    # 将iv(密钥向量)加到加密的密文开头,一起传输
    ciphertext = iv + mycipher.encrypt(data.encode())
    ​
    # 解密的话要用key和iv生成新的AES对象
    mydecrypt = AES.new(key, AES.MODE_CFB, ciphertext[:16])
    # 使用新生成的AES对象,将加密的密文解密
    decrypttext = mydecrypt.decrypt(ciphertext[16:])
    ​
    ​
    print('密钥k为:', key)
    print('iv为:', b2a_hex(ciphertext)[:16])
    print('加密后数据为:', b2a_hex(ciphertext)[16:])
    print('解密后数据为:', decrypttext.decode())
    

    运行结果:

    密钥k为: b'this is a 16 key'
    iv为: b'a78a177cffd50878'
    加密后数据为: b'33f61e7678c25d795d565d40f2f68371da051202'
    解密后数据为: 南来北往
    

    RSA

    非对称加密

    典型的如RSA等,常见方法,使用openssl ,keytools等工具生成一对公私钥对,使用被公钥加密的数据可以使用私钥来解密,反之亦然(被私钥加密的数据也可以被公钥解密) 。

    在实际使用中私钥一般保存在发布者手中,是私有的不对外公开的,只将公钥对外公布,就能实现只有私钥的持有者才能将数据解密的方法。 这种加密方式安全系数很高,因为它不用将解密的密钥进行传递,从而没有密钥在传递过程中被截获的风险,而破解密文几乎又是不可能的。

    但是算法的效率低,所以常用于很重要数据的加密,常和对称配合使用,使用非对称加密的密钥去加密对称加密的密钥。

    简介

    RSA加密算法是一种非对称加密算法。在公开密钥加密和电子商业中RSA被广泛使用。

    该算法基于一个十分简单的数论事实:将两个大素数相乘十分容易,但那时想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥,即公钥,而两个大素数组合成私钥。公钥是可发布的供任何人使用,私钥则为自己所有,供解密之用。

    Python实现

    首先我们需要安装一个rsa模块:

    pip install rsa
    

    而且,因为RSA加密算法的特性,RSA的公钥私钥都是10进制的,但公钥的值常常保存为16进制的格式,所以需要将其用int()方法转换为10进制格式。

    用网页中的公钥把数据加密

    import rsa
    import binascii
    ​
    # 使用网页中获得的n和e值,将明文加密
    def rsa_encrypt(rsa_n, rsa_e, message):
     # 用n值和e值生成公钥
     key = rsa.PublicKey(rsa_n, rsa_e)
     # 用公钥把明文加密
     message = rsa.encrypt(message.encode(), key)
     # 转化成常用的可读性高的十六进制
     message = binascii.b2a_hex(message)
     # 将加密结果转化回字符串并返回
     return message.decode()
    ​
    # RSA的公钥有两个值n和e,我们在网站中获得的公钥一般就是这样的两个值。
    # n常常为长度为256的十六进制字符串
    # e常常为十六进制‘10001’
    pubkey_n = '8d7e6949d411ce14d7d233d7160f5b2cc753930caba4d5ad24f923a505253b9c39b09a059732250e56c594d735077cfcb0c3508e9f544f101bdf7e97fe1b0d97f273468264b8b24caaa2a90cd9708a417c51cf8ba35444d37c514a0490441a773ccb121034f29748763c6c4f76eb0303559c57071fd89234d140c8bb965f9725'
    pubkey_e = '10001'
    # 需要将十六进制转换成十进制
    rsa_n = int(pubkey_n, 16)
    rsa_e = int(pubkey_e, 16)
    # 要加密的明文
    message = '南北今天很忙'
    ​
    print("公钥n值长度:", len(pubkey_n))
    print(rsa_encrypt(rsa_n, rsa_e, message))
    

    运行结果:

    公钥n值长度: 256
    480f302eed822c8250256511ddeb017fcb28949cc05739ae66440eecc4ab76e7a7b2f1df398aefdfef2b9bfce6d6152bf6cc1552a0ed8bebee9e094a7ce9a52622487a6412632144787aa81f6ec9b96be95890c4c28a31b3e8d9ea430080d79297c5d75cd11df04df6e71b237511164399d72ccb2f4c34022b1ea7b76189a56e

     

    展开全文
  • SSL 加密方式

    万次阅读 2018-08-23 11:44:36
    密码学是涉及数学、电子信息、计算机等多学科的一门重要学科,是现代互联网安全的基石,也是目前如火如荼的区块链技术的安全保障。概括来说,加密方式可归结为不可逆加密与可逆加密。   不可逆加密   信息摘要...
  • 加密WIFI和未加密WIFI的安全性获取方式
  • 安全架构-加密算法-对称加密

    千次阅读 2020-12-21 21:50:03
    安全架构-加密算法-对称加密 本系列安全架构文章中,之前谈到了api接口签名防止数据篡改,但是关键数据在通讯过程中是不能明文传递的,这就涉及到另外的安全问题,数据加密传输。 加密算法根据加密秘钥的不同分为...
  • 安全加密技术】非对称加密

    千次阅读 2015-07-08 23:35:11
    假如现在 你向支付宝 转账,即一些数据信息,为了保证信息传送的保密性、真实性、完整性和不可否认性,需要对传送的信息进行数字加密和签名,其传送过程为: 1.首先你要确认是否是支付宝的数字证书,如果确认为...
  • 常见加密方式

    千次阅读 2017-09-30 10:18:46
    对称加密是快速、简单的一种加密方式,加密(encryption)与解密(decryption)用的是同样的密钥(secret key)。对称加密有很多种算法,由于它效率很高,所以被广泛使用在很多加密协议的核心当中。 对称加密...
  • 世界上迄今为止最安全加密算法

    千次阅读 2019-11-28 21:58:00
    全世界只有3.14 %的人关注了青少年数学之旅一个只能用算力来破解的加密算法1人类的加密史公元前5世纪,古希腊人使用一根叫scytale的棍子来传递加密信息。要加密时,先绕棍子卷一张纸...
  • 第一章 常见网络攻击 1.1、XSS攻击 ...XSS攻击的全称是跨站脚本攻击(Cross Site Scripting),为不跟层叠样式表 ...(Cascading Style Sheets,CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS ...1.1.2 XSS攻击方式 ...
  • BCrypt加密方式

    千次阅读 2018-07-18 17:23:45
    目前所使用比较多的是MD5,但是BCrypt也使用的比较多,相对来说BCrypt比MD5要安全一些,他的加密更慢。而且一般我们再对密码进行密文加密后,如果有人从数据库中拿到密码通过比对也容易找出对应的用户。因此我们在对...
  • 加密计算的结果送给安全芯片,安全芯片再解密的结果送回 MCU 进行比较 。 5 、 LKT 安全芯片 将 CPU 或者是软件中的一部分程序移植到安全芯片中,没有此安全芯片 cpu 的程序不完整 , 提供了 DES 、 3DES 加...
  • SQLite加密方式

    千次阅读 2018-03-06 08:16:19
    关于SQLiteSQLite是一个轻量的、跨平台的、开源的数据库引擎,它的在读写效率、消耗总量、延迟时间和整体简单性上具有的优越性,使其... SQLite加密方式对数据库加密的思路有两种:1. 将内容加密后再写入数据库这...
  • Android 获取wifi的加密方式

    万次阅读 2015-08-01 15:57:53
    Android 获取当前wifi的加密方式由于有需求是搜索附近的网络,通过账号和密码连接wifi,但是连接的时候需要知道连接的wifi加密方式这篇博客 也是我写的,由于忘记...WPA-PSK/WPA2-PSK(目前最安全家用加密) WPA/WPA2
  • 加密安全 - Java加密安全

    千次阅读 2019-05-06 16:19:29
    JAVA的加密安全 那什么是数据安全呢,假设Bob需要给Alice发封邮件,在邮件传输的过程中,黑客可能会窃取到邮件的内容,所以我们需要防窃听, 黑客还可能会篡改邮件的内容,Alice必须有能力识别邮件有没有被篡改,最后...
  • 在线视频常见加密方式安全性透析

    万次阅读 多人点赞 2018-04-25 17:22:51
    安全性的角度考虑,各大网站或平台应当及时摒弃以上加密方式。   二、防IT技术人员 IT技术人员,是指具有一定的计算机基础,会利用现成工具乃至在程序方面,有深入研究的人群。如网站管理员,程序员等。 针对该...
  • 无线加密的几种加密方式

    千次阅读 2017-05-15 20:04:27
    无线加密的几种加密方式     目前无线路由器里带有的加密模式主要有:WEP,WPA-PSK(TKIP),WPA2-PSK(AES)和WPA-PSK(TKIP)+WPA2-PSK(AES)。   WEP(有线等效加密) WEP是WiredEquivalentPrivacy的...
  • API接口加密方式说明

    千次阅读 2018-12-19 20:48:27
    本文档适用于api接口开发人员、移动端开发人员,针对移动端请求API接口时加密方式以及加密规则进行说明。 加密方式 不采取非对称加密说明 好处: 相对于对称加密,非对称加密安全性远远高宇对称加密,能够保证在数据...
  • 软件加密方式

    千次阅读 2007-07-16 10:28:00
    软件加密方式加密一词来源已久,自从人们希望对自己私人的信息得到保护开始,就有了加密这个概念。软件行业的加密是软件厂商为了保护软件开发的利润而采取的一种软件保护方式,加密 的好坏直接影响到软件的销售,从 ...
  • 1、常用的加密算法分类 常见的加密算法可以分成五类: 对称加密算法、非对称加密算法和、Hash 算法(也称摘要算法)、数字签名(Hash&...假设两个用户需要使用对称加密方法加密然后交换数据,则用户...
  • 安全加密算法(-)

    千次阅读 2017-03-11 20:59:09
    **目前各种系统,特别是政府和金融领域的系统对于系统的安全都是特别重视的,提到安全,不得不提加密算法,提到加密算法不得不提的两种加密类型: 对称加密和非对称加密** 抄下百度吧:对称加密:需要对加密和解密使用...
  • Linux的安全加密

    千次阅读 2017-09-29 19:58:38
    在互联网时代,重要的是数据信息的安全。为了防止你的网站、服务器或者系统,我们会使用一些手段来防止一些恶意的攻击或者访问。这篇博就来说说linux的安全加密。 什么是加密加密总的来说就是将一串数据或者...
  • WiFi加密方式有哪些?

    千次阅读 2019-10-12 23:17:09
    wifi加密方式有:  1.安全模式: WPA 、WPA2、WPA/WPA2、WEP、802.1x(EAP)(企业版的WPA)...目前最常用的是WPA2。 下面是安全模式和密码加密方式的全部组合: PSK:密码共享 [ESS]:电梯安全系统 [WPS]:WIFI是由W...
  • 常用wifi 加密方式区别

    千次阅读 2017-08-23 11:06:39
    目前无线路由器里带有的加密模式主要有:WEP,WPA-PSK(TKIP),WPA2-PSK(AES)和WPA-PSK(TKIP)+WPA2-PSK(AES)。WEP(有线等效加密)WEP是WiredEquivalentPrivacy的简称,802.11b标准里定义的一个用于无线...
  • 常见的加密方式、Https、ssl过程演变

    千次阅读 2021-02-24 16:51:22
    加密是开发中或多或少都会遇到的问题,本文阐述了常见的加密类型和加密方式,并以https的ssl过程为例分析各种加密以及认证方式。 若有描述不清楚或者错误的地方还请大家留言斧正
  • Java中常用的加密方式

    千次阅读 2017-12-28 14:27:22
    一、Java常用加密方式 Base64加密算法(编码方式) MD5加密(消息摘要算法,验证信息完整性) 对称加密算法 非对称加密算法 数字签名算法 数字证书 二、分类 按加密算法是否需要key被分为两类: 不基于key的有: Base64...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 175,311
精华内容 70,124
关键字:

目前最安全的加密方式