精华内容
下载资源
问答
  • 常见的分组加密算法
    千次阅读
    2019-06-07 17:37:04

    1. 加密算法

    • 加密算法分为单项加密和双项加密算法
    • 双项加密分为对称加密和非对称加密算法,单项加密一般为Hash算法

    1.1 对称加密算法

    1. 对称加密算法是指加密和解密采用相同的密钥,是可逆的,即可以解密。
    2. 常见对称加密算法包括:AES,DES,3DES。
    3. AES加密算法是密码学中的高级加密标准,采用的是对称分组密码体制,密钥长度的最少支持为128。
    4. DES加密算法是利用56+8奇偶效验位 = 64位的密钥对以64位为单位的块数据进行加解密。
    • 优点:加密速度快
    • 缺点:密钥的传递和保存是个问题,参与加密和解密的密钥是一样的,所以安全性不能保证。

    1.2非对称加密算法

    1. 非对称加密算法是指加密和解密采用不同的密钥(公钥和私钥),因此非对称加密也叫公钥加密,是可逆的(即可解密)。
    2. RSA加密算法是基于一个十分简单的数论事实:将两个大素数相乘十分容易,但是想要对其乘积进行因式分解极其困难,因此可以将乘积公开作为加密密钥。虽然RSA的安全性一直未能得到理论上的证明,但它经历了各种攻击至今未被完全攻破。
    3. 常见的非对称加密算法包括:RSA,DSA。
    4. RSA加密算法可以用来做数据加密,也可以用来数字签名。
    • 优点:密和解密的密钥不一致,公钥是可以公开的,只需保证私钥不被泄露即可,这样就密钥的传递变的简单很多,从而降低了被破解的几率。
    • 加密速度慢
    • 数字签名过程:甲方用私钥加密,乙方用公钥解密(乙方解密成功说明就是甲方加的密,甲方就不可以抵赖)

    1.3 Hash加密算法

    1. 常见的Hash加密算法包括:MD4,MD5,SHA-1
    2. MD5全称是Message-Digest Algorithm 5(信息摘要算法5),单向的算法不可逆(被MD5加密的数据不能被解密)。MD5加密后的数据长度要比加密数据小的多,且长度固定,且加密后的串是唯一的。
    3. 适用场景:常用在不可还原的密码存储、信息完整性校验等。
    4. 信息完整性校验:典型的应用是对一段信息产生信息摘要,以防止被篡改。如果再有一个第三方的认证机构,用MD5还可以防止文件作者的“抵赖”,这就是所谓的数字签名应用。

    1.4 Base64加密算法

    1. Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,Base64编码可用于在HTTP环境下传递较长的标识信息。
    2. Base64就是一种基于64个可打印字符来表示二进制数据的方法。
    3. Base64加密算法属于对称加密算法。
    更多相关内容
  • 常见加密算法及详解都在这里!

    千次阅读 多人点赞 2019-12-20 00:06:39
    首先,大家要知道加密算法能干什么,利用加密算法来对数据通信的过程进行加密传输是一种最常见的安全手段。利用该手段能够达到一下三个目的: 1、数据保密性,防止用户数据被窃取或泄露; 2、数据完整性,防止用户...

    加密算法,是现在每个软件项目里必须用到的内容。广泛应用在包括了用户登入、数字签名、数据传输等多个场合。那大家都知道那些呢?今天我把常见的加密算法全部整理在这里,供大家学习参考。

    首先,大家要知道加密算法能干什么,利用加密算法来对数据通信的过程进行加密传输是一种最常见的安全手段。利用该手段能够达到一下三个目的:

    1、数据保密性,防止用户数据被窃取或泄露;
    2、数据完整性,防止用户传输的数据被篡改;
    3、通信双方身份确认,确保数据来源合法;

    常见的加密算法

    目前常见的加密算法分类如下:

    1,单向散列加密算法

        常见算法包括:MD5、sha1、sha256等

    2,对称加密算法

        常见的算法有:DES、3DES、AES

    3,非对称加密算法 

          常见算法包括:RSA、ECC

    各种加密算法对比如下:

    1,单向散列加密算法:

    名称运行速度安全性
    MD5
    SHA-1
    SHA-256更慢更高

    2,对称加密算法:

    名称 密钥运行速度安全性资源消耗
    DES56位较快
    3DES112位或168位
    AES128、192、256位

    3,非对称加密算法:

    名称成熟度安全性运算速度资源消耗
    RSA
    ECC

     

    加密算法详解

    一,单向散列加密

    单向散列加密算法常用于提取数据,验证数据的完整性。发送者将明文通过单向加密算法加密生成定长的密文串,然后将明文和密文串传递给接收方。接收方在收到报文后,将解明文使用相同的单向加密算法进行加密,得出加密后的密文串。随后与发送者发送过来的密文串进行对比,若发送前和发送后的密文串相一致,则说明传输过程中数据没有损坏;若不一致,说明传输过程中数据丢失了。其次也用于密码加密传递存储。单向加密算法只能用于对数据的加密,无法被解密,其特点为定长输出、雪崩效应。

    1.1,MD5加密算法

    MD5加密算法用的是哈希函数,一般应用于对信息产生信息摘要,防止信息被篡改。最常见的使用是对密码加密、生成数字签名。从严格意义上来说,MD5是摘要算法,并非加密算法。MD5 生成密文时,无论要加密的字符串有多长,它都会输出长度为 128bits 的一个密文串,通常16 进制时为 32 个字符。

    public static final byte[] computeMD5(byte[] content) {    try {          MessageDigest md5 = MessageDigest.getInstance("MD5");          return md5.digest(content);    } catch (NoSuchAlgorithmException e) {          throw new RuntimeException(e);    }}

    1.2,SHA1加密算法

    SHA1加密算法,与MD5一样,也是目前较流行的摘要算法。但SHA1 比 MD5 的 安全性更高。对长度小于 2 ^ 64 位的消息,SHA1会产生一个 160 位的 消息摘要。基于 MD5、SHA1 的信息摘要特性以及不可逆,可以被应用在检查文件完整性, 数字签名等场景。

    public static byte[] computeSHA1(byte[] content) {    try {          MessageDigest sha1 = MessageDigest.getInstance("SHA1");          return sha1.digest(content);    } catch (NoSuchAlgorithmException e) {          throw new RuntimeException(e);    }}

    1.3,SHA256加密算法

    SHA256是SHA2算法中的一种,如SHA2加密算法中有:SHA244、SHA256、SHA512等。SHA2属于SHA1的升级,SHA1是160位的哈希值,而SHA2是组合值,有不同的位数,其中最受欢迎的是256位(SHA256算法)。

    SSL行业选择SHA作为数字签名的散列算法,从2011到2015,一直以SHA-1位主导算法。但随着互联网技术的提升,SHA-1的缺点越来越突显。从去年起,SHA-2成为了新的标准,所以现在签发的SSL证书,必须使用该算法签名。

    public static byte[] getSHA256(String str) {    MessageDigest messageDigest;    String encodestr = "";    try {        messageDigest = MessageDigest.getInstance("SHA-256");        messageDigest.update(str.getBytes("UTF-8"));        return messageDigest.digest());    } catch (NoSuchAlgorithmException e) {        e.printStackTrace();    } catch (UnsupportedEncodingException e) {        e.printStackTrace();    }}

    二,对称加密算法

    对称加密算法采用单密钥加密,在数据传输过程中,发送方将原始数据分割成固定大小的块,经过密钥和加密算法逐个加密后,发送给接收方;接收方收到加密后的报文后,结合密钥和解密算法解密组合后得出原始数据。由于加解密算法是公开的,因此在这过程中,密钥的安全传递就成为了至关重要的事了。而密钥通常来说是通过双方协商,以物理的方式传递给对方,或者利用第三方平台传递给对方,一旦这过程出现了密钥泄露,不怀好意的人就能结合相应的算法拦截解密出其加密传输的内容。

    AES、DES、3DES 都是对称的块加密算法,加解密的过程是可逆的。

    2.1,DES算法

    DES算法为密码体制中的对称密码体制,又被称为美国数据加密标准,是1972年美国IBM公司研制的对称密码体制加密算法。明文按64位进行分组,密钥长64位,密钥事实上是56位参与DES运算(第8、16、24、32、40、48、56、64位是校验位, 使得每个密钥都有奇数个1)分组后的明文组和56位的密钥按位替代或交换的方法形成密文组的加密方法。

    DES 加密算法是对密钥进行保密,公开加密和解密算。只有知道发送方相同密钥的人才能解读获取的密文数据。想破译 DES 加密算法,就要搜索密钥的编码。对于56位长度的密钥来说,用穷举法,其运算次数为 2 ^ 56 次。

    2.2,3DES算法

    3DES又称Triple DES,是DES加密算法的一种模式,它使用2条不同的56位的密钥对数据进行三次加密。DES使用56位密钥和密码块的方法,而在密码块的方法中,文本被分成64位大小的文本块然后再进行加密。比起最初的DES,3DES更为安全。

    public class Des3 {    private static final String Algorithm = "DESede";     /**     * 加密     * @param keybyte     * @param src     * @return     */    public static byte[] encryptMode(byte[] keybyte, byte[] src) {        try {            // 生成密钥            SecretKey deskey = new SecretKeySpec(keybyte, Algorithm);            // 加密            Cipher c1 = Cipher.getInstance(Algorithm);            c1.init(Cipher.ENCRYPT_MODE, deskey);            return c1.doFinal(src);        } catch (java.security.NoSuchAlgorithmException e1) {            e1.printStackTrace();        } catch (javax.crypto.NoSuchPaddingException e2) {            e2.printStackTrace();        } catch (java.lang.Exception e3) {            e3.printStackTrace();        }        return null;    }
        /**     * 解密     * @param keybyte 为加密密钥,长度为24字节     * @param src 为加密后的缓冲区     * @return     */    public static byte[] decryptMode(byte[] keybyte, byte[] src) {        try {            // 生成密钥            SecretKey deskey = new SecretKeySpec(keybyte, Algorithm);            // 解密            Cipher c1 = Cipher.getInstance(Algorithm);            c1.init(Cipher.DECRYPT_MODE, deskey);            return c1.doFinal(src);        } catch (Exception e) {            e.printStackTrace();        }        return null;    }    // 转换成十六进制字符串    public static String byte2hex(byte[] b) {        String hs = "";        String stmp = "";        for (int n = 0; n < b.length; n++) {            stmp = (java.lang.Integer.toHexString(b[n] & 0XFF));            if (stmp.length() == 1) {                hs = hs + "0" + stmp;            } else {                hs = hs + stmp;            }            if (n < b.length - 1) {                hs = hs + ":";            }        }        return hs.toUpperCase();    }}

    2.3,AES算法

    AES算法是密码学中的高级加密标准,同时也是美国联邦政府采用的区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。算法采用对称分组密码体制,密钥长度的最少支持为 128 位、 192 位、256 位,分组长度 128 位,算法应易于各种硬件和软件实现。AES本身就是为了取代DES的,AES具有更好的安全性、效率和灵活性。

    public class AESUtils {    /**     * 加密     *     * @param content     * @param strKey     * @return     * @throws Exception     */    public static byte[] encrypt(String content, String strKey) throws Exception {        SecretKeySpec skeySpec = getKey(strKey);        Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");        IvParameterSpec iv = new IvParameterSpec("0102030405060708".getBytes());        cipher.init(Cipher.ENCRYPT_MODE, skeySpec, iv);        return cipher.doFinal(content.getBytes());    }
        /**     * 解密     *     * @param strKey     * @param content     * @return     * @throws Exception     */    public static String decrypt(byte[] content, String strKey) throws Exception {        SecretKeySpec skeySpec = getKey(strKey);        Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");        IvParameterSpec iv = new IvParameterSpec("0102030405060708".getBytes());        cipher.init(Cipher.DECRYPT_MODE, skeySpec, iv);        byte[] original = cipher.doFinal(content);        String originalString = new String(original);        return originalString;    }
        private static SecretKeySpec getKey(String strKey) throws Exception {        byte[] arrBTmp = strKey.getBytes();        byte[] arrB = new byte[16];         for (int i = 0; i < arrBTmp.length && i < arrB.length; i++) {            arrB[i] = arrBTmp[i];        }        SecretKeySpec skeySpec = new SecretKeySpec(arrB, "AES");        return skeySpec;    }}
    

    三,非对称加密算法

    非对称加密算法采用公钥(publickey)和私钥(privatekey)两种不同的密钥来进行加解密。公钥与私钥是一对,如果用公钥对数据进行加密,只有用对应的私钥才能解密,反之亦然。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。 

    非对称加密算法实现机密信息交换的基本过程是:甲方生成一对密钥并将公钥公开,需要向甲方发送信息的其他角色(乙方)使用该密钥(甲方的公钥)对机密信息进行加密后再发送给甲方;甲方再用自己私钥对加密后的信息进行解密。甲方想要回复乙方时正好相反,使用乙方的公钥对数据进行加密,同理,乙方使用自己的私钥来进行解密。

     

    3.1,RSA算法

    RSA是目前最有影响力的公钥加密算法,也是被普遍认为是目前最优秀的公钥方案之一。RSA算法是第一个能同时用于加密和数字签名的算法,也易于理解和操作。RSA是被研究得最广泛的公钥算法,从提出到现今的三十多年里,经历了各种攻击的考验,逐渐为人们接受,截止2017年被普遍认为是最优秀的公钥方案之一。也已被ISO推荐为公钥数据加密标准。

    public class RSAUtils {
        public static final String KEY_ALGORITHM = "RSA";    private static final String PUBLIC_KEY = "RSAPublicKey";    private static final String PRIVATE_KEY = "RSAPrivateKey";
        /**     * 私钥解密     *     * @param data 已加密数据     * @param privateKey 私钥(BASE64编码)     * @return     * @throws Exception     */    public static String decryptByPrivateKey(String data, String privateKey) throws Exception {        byte[] keyBytes = Base64.decodeBase64(privateKey);        PKCS8EncodedKeySpec pkcs8KeySpec = new PKCS8EncodedKeySpec(keyBytes);        KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM);        Key privateK = keyFactory.generatePrivate(pkcs8KeySpec);        Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm());        cipher.init(Cipher.DECRYPT_MODE, privateK);        byte[] buff = cipher.doFinal(Base64.decodeBase64(data));        return new String(buff);    }
        /**     * 公钥解密     *     * @param data 已加密数据     * @param publicKey 公钥(BASE64编码)     * @return     * @throws Exception     */    public static String decryptByPublicKey(String data, String publicKey) throws Exception {        byte[] keyBytes = Base64.decodeBase64(publicKey);        X509EncodedKeySpec x509KeySpec = new X509EncodedKeySpec(keyBytes);        KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM);        Key publicK = keyFactory.generatePublic(x509KeySpec);        Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm());        cipher.init(Cipher.DECRYPT_MODE, publicK);        // 执行解密操作        byte[] buff = cipher.doFinal(Base64.decodeBase64(data));        return new String(buff);    }
        /**     * 公钥加密     *     * @param data 源数据     * @param publicKey 公钥(BASE64编码)     * @return     * @throws Exception     */    public static String encryptByPublicKey(String data, String publicKey) throws Exception {        byte[] keyBytes = Base64.decodeBase64(publicKey);        X509EncodedKeySpec x509KeySpec = new X509EncodedKeySpec(keyBytes);        KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM);        Key publicK = keyFactory.generatePublic(x509KeySpec);        // 对数据加密        Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm());        cipher.init(Cipher.ENCRYPT_MODE, publicK);        byte[] buff = cipher.doFinal(data.getBytes());        return Base64.encodeBase64String(buff);    }
        /**     * 私钥加密     *     * @param data 源数据     * @param privateKey 私钥(BASE64编码)     * @return     * @throws Exception     */    public static String encryptByPrivateKey(String data, String privateKey) throws Exception {        byte[] keyBytes = Base64.decodeBase64(privateKey);        PKCS8EncodedKeySpec pkcs8KeySpec = new PKCS8EncodedKeySpec(keyBytes);        KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM);        Key privateK = keyFactory.generatePrivate(pkcs8KeySpec);        Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm());        cipher.init(Cipher.ENCRYPT_MODE, privateK);        byte[] buff = cipher.doFinal(data.getBytes());        // 执行加密操作。加密后的结果通常都会用Base64编码进行传输        return Base64.encodeBase64String(buff);    }
        /**     * 获取私钥     *     * @param keyMap 密钥对     * @return     * @throws Exception     */    public static String getPrivateKey(Map<String, Object> keyMap) throws Exception {        Key key = (Key) keyMap.get(PRIVATE_KEY);        return Base64.encodeBase64String(key.getEncoded());    }
        /**     * 获取公钥     *     * @param keyMap 密钥对     * @return     * @throws Exception     */    public static String getPublicKey(Map<String, Object> keyMap) throws Exception {        Key key = (Key) keyMap.get(PUBLIC_KEY);        return Base64.encodeBase64String(key.getEncoded());    }
        /**     * 生成密钥对(公钥和私钥)     *     * @return     * @throws Exception     */    public static Map<String, Object> initKey() throws Exception {        KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance(KEY_ALGORITHM);        keyPairGen.initialize(1024);        KeyPair keyPair = keyPairGen.generateKeyPair();        RSAPublicKey publicKey = (RSAPublicKey) keyPair.getPublic();        RSAPrivateKey privateKey = (RSAPrivateKey) keyPair.getPrivate();        Map<String, Object> keyMap = new HashMap<String, Object>(2);        keyMap.put(PUBLIC_KEY, publicKey);        keyMap.put(PRIVATE_KEY, privateKey);        return keyMap;    }}

    3.2,ECC算法

    ECC(椭圆加密算法)是一种公钥加密体制,主要优势是在某些情况下它比其他的方法使用更小的密钥——比如RSA加密算法——提供相当的或更高等级的安全。不过一个缺点是加密和解密操作的实现比其他机制时间长。它相比RSA算法,对 CPU 消耗严重。

    public abstract class ECCCoder extends Coder {    public static final String ALGORITHM = "EC";    private static final String PUBLIC_KEY = "ECCPublicKey";    private static final String PRIVATE_KEY = "ECCPrivateKey";
        /**     * 用私钥解密     * @param data     * @param key     * @return     * @throws Exception     */    public static byte[] decrypt(byte[] data, String key) throws Exception {        // 对密钥解密        byte[] keyBytes = decryptBASE64(key);        // 取得私钥        PKCS8EncodedKeySpec pkcs8KeySpec = new PKCS8EncodedKeySpec(keyBytes);        KeyFactory keyFactory = ECKeyFactory.INSTANCE;        ECPrivateKey priKey = (ECPrivateKey) keyFactory.generatePrivate(pkcs8KeySpec);        ECPrivateKeySpec ecPrivateKeySpec = new ECPrivateKeySpec(priKey.getS(),priKey.getParams());        // 对数据解密        Cipher cipher = new NullCipher();        cipher.init(Cipher.DECRYPT_MODE, priKey, ecPrivateKeySpec.getParams());        return cipher.doFinal(data);    }    /**     * 用公钥加密     * @param data     * @param privateKey     * @return     * @throws Exception     */    public static byte[] encrypt(byte[] data, String privateKey) throws Exception {        // 对公钥解密        byte[] keyBytes = decryptBASE64(privateKey);        // 取得公钥        X509EncodedKeySpec x509KeySpec = new X509EncodedKeySpec(keyBytes);        KeyFactory keyFactory = ECKeyFactory.INSTANCE;        ECPublicKey pubKey = (ECPublicKey) keyFactory.generatePublic(x509KeySpec);        ECPublicKeySpec ecPublicKeySpec = new ECPublicKeySpec(pubKey.getW(), pubKey.getParams());        Cipher cipher = new NullCipher();        cipher.init(Cipher.ENCRYPT_MODE, pubKey, ecPublicKeySpec.getParams());        return cipher.doFinal(data);    }        /**     * 取得私钥     * @param keyMap     * @return     * @throws Exception     */    public static String getPrivateKey(Map<String, Object> keyMap) throws Exception {        Key key = (Key) keyMap.get(PRIVATE_KEY);        return encryptBASE64(key.getEncoded());    }    /**     * 取得公钥     * @param keyMap     * @return     * @throws Exception     */    public static String getPublicKey(Map<String, Object> keyMap) throws Exception {        Key key = (Key) keyMap.get(PUBLIC_KEY);        return encryptBASE64(key.getEncoded());    }}

     

    推荐阅读:

    为什么程序员都不喜欢使用switch,而是大量if…else?

    快速图解Spring Cloud微服务架构

    切记 | 不要在MySQL中使用UTF-8

    Mybatis中 $ 和 # 千万别乱用!

    扫码关注公众号,发送关键词获取相关资料:

    1. 发“Springboot”领取电商项目实战源码;

    2. 发“SpringCloud”领取学习实战资料;

     

    展开全文
  • 常见加密算法

    千次阅读 2021-10-24 12:40:43
    常见加密算法 1、对称加密算法(AES、DES、3DES) 对称加密算法是指加密和解密采用相同的密钥,是可逆的(即可解密)。 AES加密算法是密码学中的高级加密标准,采用的是对称分组密码体制,密钥长度的最少支持为128。...

    常见加密算法

    1、对称加密算法(AES、DES、3DES)

    对称加密算法是指加密和解密采用相同的密钥,是可逆的(即可解密)。

    AES加密算法是密码学中的高级加密标准,采用的是对称分组密码体制,密钥长度的最少支持为128。AES加密算法是美国联邦政府采用的区块加密标准,这个标准用来替代原先的DES,已经被多方分析且广为全世界使用。

    AES数学原理详解:https://www.cnblogs.com/block2016/p/5596676.html

    **优点:**加密速度快

    **缺点:**密钥的传递和保存是一个问题,参与加密和解密的双方使用的密钥是一样的,这样密钥就很容易泄露。

    2、非对称加密算法(RSA、DSA、ECC)

    非对称加密算法是指加密和解密采用不同的密钥(公钥和私钥),因此非对称加密也叫公钥加密,是可逆的(即可解密)。公钥密码体制根据其所依据的难题一般分为三类:大素数分解问题类、离散对数问题类、椭圆曲线类。

    RSA加密算法是基于一个十分简单的数论事实:将两个大素数相乘十分容易,但是想要对其乘积进行因式分解极其困难,因此可以将乘积公开作为加密密钥。虽然RSA的安全性一直未能得到理论上的证明,但它经历了各种攻击至今未被完全攻破。

    **优点:**加密和解密的密钥不一致,公钥是可以公开的,只需保证私钥不被泄露即可,这样就密钥的传递变的简单很多,从而降低了被破解的几率。

    **缺点:**加密速度慢

    RSA加密算法既可以用来做数据加密,也可以用来数字签名。

    –数据加密过程:发送者用公钥加密,接收者用私钥解密(只有拥有私钥的接收者才能解读加密的内容)

    –数字签名过程:甲方用私钥加密,乙方用公钥解密(乙方解密成功说明就是甲方加的密,甲方就不可以抵赖)

    详细数学原理见 【来龙去脉系列】RSA算法原理

    ECC加密算法是基于椭圆曲线上离散对数计算问题(ECDLP)的ECC算法。ECC算法的数学理论非常深奥和复杂,在工程应用中比较难于实现,但它的单位安全强度相对较高。

    用国际上公认的对于ECC算法最有效的攻击方法–Pollard rho方法去破译和攻击ECC算法,它的破译或求解难度基本上是指数级的。正是由于RSA算法ECC算法这一明显不同,使得ECC算法的单位安全强度高于RSA算法,也就是说,要达到同样的安全强度,ECC算法所需的密钥长度远比RSA算法低。有研究表示160位的椭圆密钥与1024位的RSA密钥安全性相同。在私钥的加密解密速度上,ECC算法比RSA、DSA速度更快。存储空间占用更小。

    扩展阅读:

    ECDH and ECDSA

    How to encrypt data using Elliptic Curve Algorithm in C#

    ECC Examples for C#

    3、线性散列算法算法(MD5、SHA1、HMAC)

    MD5全称是Message-Digest Algorithm 5(信息摘要算法5),单向的算法不可逆(被MD5加密的数据不能被解密)。MD5加密后的数据长度要比加密数据小的多,且长度固定,且加密后的串是唯一的。

    适用场景:常用在不可还原的密码存储、信息完整性校验等。

    信息完整性校验:典型的应用是对一段信息产生信息摘要,以防止被篡改。如果再有一个第三方的认证机构,用MD5还可以防止文件作者的“抵赖”,这就是所谓的数字签名应用。

    SHA-1 与 MD5 的比较

    SHA-1摘要比MD5摘要长32 位,所以SHA-1对强行攻击有更大的强度,比MD5更安全。使用强行技术,产生任何一个报文使其摘要等于给定报摘要的难度对MD5是2128数量级的操作,而对SHA-1则是2160数量级的操作。

    在相同的硬件上,SHA-1 的运行速度比 MD5 慢。

    4、混合加密

    由于以上加密算法都有各自的缺点(RSA加密速度慢、AES密钥存储问题、MD5加密不可逆),因此实际应用时常将几种加密算法混合使用。

    例如:RSA+AES:

    采用RSA加密AES的密钥,采用AES对数据进行加密,这样集成了两种加密算法的优点,既保证了数据加密的速度,又实现了安全方便的密钥管理。

    那么,采用多少位的密钥合适呢?一般来讲密钥长度越长,安全性越高,但是加密速度越慢。所以密钥长度也要合理的选择,一般RSA建议采用1024位的数字,AES建议采用128位即可。

    5、Base64

    严格意义讲,Base64并不能算是一种加密算法,而是一种编码格式,是网络上最常见的用于传输8bid字节代码的编码方式之一。

    Base64编码可用于在HTTP环境下传递较长的标识信息,Base编码不仅不仅比较简单,同时也据有不可读性(编码的数据不会被肉眼直接看到)。

    展开全文
  • 分组密码算法加密模式

    千次阅读 2019-10-29 19:41:35
    一旦密钥固定,那么可以将加解密过程视为一个映射,例如AES算法,每加密一次,就可以视为128bit到128bit的数据映射。在实际加密中,一般加密的数据不会只有几百bit,而是几mb,甚至几gb。这样,加密过程就是每加密...

    一.分组密码加密模式简介

    在分组密码中,一般所选用的密码算法都是公开的,加密过程中,只有密钥是保密的。一旦密钥固定,那么可以将加解密过程视为一个映射,例如AES算法,每加密一次,就可以视为128bit到128bit的数据映射。在实际加密中,一般加密的数据不会只有几百bit,而是几mb,甚至几gb。这样,加密过程就是每加密128bit接着再加密128bit,直至将全部数据加密完。那么,就有几种常见的加密模式。

    二.五种加密模式

    1.ECB模式

    这是最简单最普通的加密模式,就是加密完一轮数据,接着加密下一轮数据,不同轮次之间的数据间无任何关系,如下图所示:
    在这里插入图片描述

    2.CBC模式

    这种模式就是上面一轮加密的结果与下一轮的明文进行异或,然后进行加密。因为第一个明文分组没有前面的密文与之异或,故需要一个初始向量IV。
    在这里插入图片描述

    3.CFB

    将数据进行加密的结果与明文进行异或得到密文,然后再将密文进行加密再与明文异或得到下一个密文,依次类推。同理,在最开始的时候需要一个初始向量IV。
    在这里插入图片描述

    4.OFB

    将一个初始向量一直加密,每加密一次的结果与明文进行异或得到密文。
    在这里插入图片描述
    在这里插入图片描述

    5.CTR

    一直加密计数器,得到加密的结果与明文进行异或得到密文。
    在这里插入图片描述

    展开全文
  • 常见对称加密算法与工作模式简介

    千次阅读 2019-04-07 22:15:40
    对称密码(Symmetric Cipher)算法又叫传统密码算法加密密钥能够从解密密钥推算出来,反之也成立(在大多数对称算法中,加密密钥与解密密钥是相同的)。对称算法的安全性依赖于密钥,所以密钥的保密性对通信的安全...
  • 常见对称加密算法

    千次阅读 2019-04-10 09:13:49
    数据加密的本质就是对原始信息内容进行混淆和隐藏,使其难于理解,或难遇反向解密,或者利用现有的技术无法在短时间内破解,从而达到保障信息不被泄露的...常见的对称加密算法有: 常用算法介绍 DES: Data Encry...
  • 几种常见加密算法

    千次阅读 2020-01-13 14:43:39
    数据加密的基本过程就是对原来为明文的文件或数据按某种算法进行处理,使其成为不可读的一段代码为“密文”,使其只能在输入相应的密钥之后才能显示出原容,通过这样的途径来达到保护数据不被非法人窃取、阅读的...
  • 数据加密是一种常见且有效的安全方法,是保护企业数据的首选,可是如何给海外服务器中的数据进行加密呢,需要用到哪些技术你知道吗? 今天我们就来了解几种最常用的数据加密技术,不过在此之前,我们先了解什么是数据...
  • 面试官:说一说你常用的加密算法有哪些?
  • 对称加密算法与非对称加密算法

    多人点赞 2022-07-20 19:28:46
    对称加密算法与非对称加密算法,以及它们之间的区别
  • 对称加密算法

    2022-06-15 19:05:40
    对称加密算法的原理
  • 常见加密算法原理及概念

    千次阅读 2018-12-22 16:20:17
    在安全领域,利用密钥加密算法来对通信的过程进行加密是一种常见的安全手段。利用该手段能够保障数据安全通信的三个目标: 1、数据的保密性,防止用户的数据被窃取或泄露 2、保证数据的完整性,防止用户传输的数据...
  • 文章目录2.1 对称加密原理2.1.1 密码体制2.1.2 密码分析2.1.3 Feistel 密码结构2.2 对称分组加密算法2.2.1 数据加密标准 (DES)2.2.2 三重DES2.2.3 高级加密标准2.3 随机数和伪随机数2.3.1 随机数的应用2.3.2 真...
  • 对称加密算法基本介绍

    千次阅读 2022-04-10 12:07:27
    常见的对称加密算法有:DES,3DES,AES,RC2,RC4, RC5。 加密算法 算法 特点 DES(Data Encryption Standard) 数据加密标准,速度较快,适用于加密大量数据的场合,目前已证实不安全,可用3DES替换 3...
  • SM4分组加密算法原理和c语言实现

    千次阅读 2021-11-05 17:10:54
    在之前的文章中介绍了《SM3国密杂凑值算法的原理和c语言实现》,这篇文章主要是用c语言撸一个SM4分组加密算法。 随着信息安全的普及以及等级保护等安全政策落地,国密算法越来越频繁的出现在项目开发中,在较新的...
  • 在安全领域,利用密钥加密算法来对通信的过程进行加密是一种常见的安全手段。利用该手段能够保障数据安全通信的三个目标: 1、数据的保密性,防止用户的数据被窃取或泄露 2、保证数据的完整性,防止用户传输的数据...
  • MD5加密算法,其全称是Message-Digest Algorithm 5,通常被称为信息摘要算法,所谓的信息摘要就是把明文内容按一定规则生成一段哈希(hash)值,即得到这段明文内容的信息摘要。利用MD5可以基于任意长度的明文字符串...
  • 1.常见加密算法 (1)2021年下半年软考上午真题8 (2)2021年上半年软考上午真题9 2.加密技术的应用 3.网络安全协议分层 (1)2021年上半年软考上午真题7 (2)2021年上半年软考上午真题11 二、常见计算机...
  • 常见的几种数据加密算法

    千次阅读 2022-06-15 18:18:01
    常见的几种数据加密算法
  • 本文介绍常用的分组密码AES,DES,3DES,Blowfish,CAST,Camellia的五种模式(CBC,ECB,CFB,OFB,CTR)加密。 需要使用的包: from Crypto.Cipher import AES,DES,DES3,Blowfish,CAST,ARC2,ARC4 from Crypto...
  • AES加密是一种对称加密算法,其全称为 :Advanced Encryption Standard,是DES(Data Encryption Standard)加密算法的升级替代版,也是目前最为流行的对称加密算法之一,之所以说是对称加密算法,是因为AES的加密和...
  • 常见加密算法有哪些

    千次阅读 2020-12-15 23:04:50
    加密技术是对信息进行编码和解码的技术,编码是把原来可读信息(又称明文)译成代码形式(又称密文),其逆过程就是解码,加密技术的要点是加密算法加密算法可以分为三类: 对称加密,加密与解密 密钥相同,如 ...
  • python常见加密算法实现

    千次阅读 2022-08-09 22:13:11
    常见加密(MD5、sha256、AES、RSA、SM3、base64)算法python实现
  • 加密一般分为对称加密(Symmetric Key Encryption)和非对称加密(Asymmetric Key Encryption)。对称加密又分为分组加密和序列密码。 (1)分组加密,也叫块加密(block cyphers),一次加密...具有代表性的块加密算法有...
  • 常用的加密算法

    2021-08-24 20:58:09
    常见的七种加密算法 以及实现 数字签名、信息加密是前后端开发经常使用到的技术,应用场景包括了用户登入、交易、信息通讯、oauth等等。不同应用场景可能需要搭配不同的应用算法来实现。 数字签名 数字签名,...
  • 这里简单的给大家介绍几种常见的签名加密算法和一些典型场景下的应用。 一、数字签名 数字签名,简单来说就是通过提供可鉴别的数字信息验证自身身份的一种方式。一套数字签名通常定义两种互补的运算,一个用于签名...
  • 对称加密算法 非对称加密算法 国密算法 消息摘要算法: 相同的明文数据经过相同的消息摘要算法会得到相同的密文结果值。 数据经过消息摘要算法处理,得到的摘要结果值,是无法还原为处理前的数据的。 数据摘要算法...
  • Python实现常见加密算法

    千次阅读 2020-08-11 18:16:26
    指只能加密数据而不能解密数据,这种加密方式主要是为了保证数据的完整性,常见加密算法有MD5、sha系列等(位于python内置的hashlib模块中)。 2、对称加密 指数据加密和解密使用相同的秘钥,这种加
  • 1. 算法相关 SM2为基于椭圆曲线密码的公钥密码算法标准,包含数字签名、...SM4为分组密码,用于替代DES / AES等国际算法。(ps:对称加密) 国密版的tls替换fabric中的tls 2. 证书格式 x509:一种证书的格式标准 X.509结

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 16,852
精华内容 6,740
热门标签
关键字:

常见的分组加密算法