精华内容
下载资源
问答
  • 在笔试或面试中,经常会问到对称加密算法和非对称加密算法区别,哪些方式属于对称加密,哪些属于非对称加密,哪些地方用到了加密。 下面罗列出几种使用加密解密的场景~ 系统中前后端交互的敏感字符加密,例如身份证...

    为什么要学习加密与解密?

    在笔试或面试中,经常会问到对称加密算法和非对称加密算法区别,哪些方式属于对称加密,哪些属于非对称加密,哪些地方用到了加密。
    下面罗列出几种使用加密解密的场景~

    1. 系统中前后端交互的敏感字符加密,例如身份证号码,需要经过加密后传输
    2. 数据库中重要字段加密处理,例如银行账号,存入数据库的是密文,可依赖于Java加密或者数据库加密
    3. 对接SDK加密,按照SDK的要求进行加密,例如:先RSA后Base64等
    4. 对接渠道信息,例如对接宁波海关,文档要求,需要对数据生成摘要和签名等等

    常见的加密解密方式

    1. 对称加密:
      DES:Data Encryption Standard 标准数据加密
      AES:Advancee Encryption Standard
    2. Base64算法加密
    3. 非对称加密算法:
      RSA:是目前最有影响力的公钥加密算法
      ECC:它比其他的方法使用更小的密钥提供相当的或更高等级的安全级别
    4. MD5算法加密
    5. SHA1算法
    6. HMAC算法

    详解加密方式

    对称加密

    在这里插入图片描述
    对称加密
    采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密,这种加密方法称为对称加密,也称为单密钥加密。
    示例
    我们现在有一个原文3要发送给B
    设置密钥为108, 3 * 108 = 324, 将324作为密文发送给B
    B拿到密文324后, 使用324/108 = 3 得到原文

    常见加密算法

    1. DES : Data Encryption
      Standard,即数据加密标准,是一种使用密钥加密的块算法,1977年被美国联邦政府的国家标准局确定为联邦资料处理标准(FIPS),并授权在非密级政府通信中使用,随后该算法在国际上广泛流传开来。
    2. AES : Advanced Encryption Standard, 高级加密标准
      .在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。

    特点

    1. 加密速度快, 可以加密大文件
    2. 密文可逆, 一旦密钥文件泄漏, 就会导致数据暴露
    3. 加密后编码表找不到对应字符, 出现乱码
    4. 一般结合Base64使用
    DES: 标准数据加密

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

    入门Demo

    package com.example.password_discipline.DesAes;
    
    import com.sun.org.apache.xml.internal.security.utils.Base64;
    
    import javax.crypto.Cipher;
    import javax.crypto.spec.SecretKeySpec;
    
    
    public class DesAesDemo {
    	public static void main(String[] args) throws Exception{
    		// 原文
    		String input = "小郑";
    		// des加密串,必须是8位
    		String key = "01234567";
    		// 算法
    		String algorithm = "DES";
    
    		String transformation = "DES";
    		String encryptData = DesAesDemo.encryptDesc(input, key, algorithm, transformation);
    		System.out.println("加密后的字符串:" + encryptData);
    		String decryptDesc = DesAesDemo.decryptDesc(encryptData, key, algorithm, transformation);
    		System.out.println("解密后的字符串:" + decryptDesc);
    	}
    
    	/**
    	 * 加密
    	 * @param data
    	 * @param key
    	 * @param algorithm
    	 * @param transformation
    	 * @return
    	 * @throws Exception
    	 */
    	public static String encryptDesc(String data, String key, String algorithm, String transformation) throws Exception{
    		Cipher cipher = Cipher.getInstance(transformation);
    		SecretKeySpec secretKeySpec = new SecretKeySpec(key.getBytes(), algorithm);
    		// 对加密进行初始化
    		// 1、表示模式,有加密模式和解密模式
    		// 2、表示密钥规则
    		cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec);
    		// 进行加密
    		byte[] bytes = cipher.doFinal(data.getBytes());
    		// 打印字节输出
    		return Base64.encode(bytes);
    	}
    
    	/**
    	 * 解密
    	 * @param data
    	 * @param key
    	 * @param algorithm
    	 * @param transformation
    	 * @return
    	 * @throws Exception
    	 */
    	public static String decryptDesc(String data, String key, String algorithm, String transformation) throws Exception{
    		Cipher cipher = Cipher.getInstance(transformation);
    		// 密钥规则
    		SecretKeySpec secretKeySpec = new SecretKeySpec(key.getBytes(), algorithm);
    		cipher.init(Cipher.DECRYPT_MODE, secretKeySpec);
    		byte[] bytes = cipher.doFinal(Base64.decode(data));
    		// 打印输出
    		return new String(bytes);
    	}
    
    }
    
    

    在这里插入图片描述
    【注意】
    1、密钥Key必须是8个字节,否则会报错
    2、DES加密后是乱码,因此经常搭配Base64进行转码
    原因:对应的字节出现负数,但负数,没有出现在 ascii 码表里面,所以出现乱码

    在这里插入图片描述
    在这里插入图片描述

    Base64加密

    Base64是网络上最常见的用于传输8Bit字节码的可读性编码算法之一
    可读性编码算法不是为了保护数据的安全性,而是为了可读性
    可读性编码不改变信息内容,只改变信息内容的表现形式
    所谓Base64,即是说在编码过程中使用了64种字符:大写A到Z、小写a到z、数字0到9、“+”和“/”

    算法原理

    base64 是 3个字节为一组,一个字节 8位,一共 就是24位 ,然后,把3个字节转成4组,每组6位,
    3 * 8 = 4 * 6 = 24 ,每组6位,缺少的2位,会在高位进行补0 ,这样做的好处在于 ,base取的是后面6位,去掉高2位 ,那么base64的取值就可以控制在0-63位了,所以就叫base64,111 111 = 32 + 16 + 8 + 4 + 2 + 1 =

    base64 构成原则

    ① 小写 a - z = 26个字母
    ② 大写 A - Z = 26个字母
    ③ 数字 0 - 9 = 10 个数字
    ④ + / = 2个符号

    大家可能发现一个问题,咱们的base64有个 = 号,但是在映射表里面没有发现 = 号 , 这个地方需要注意,等号非常特殊,因为base64是三个字节一组 ,如果当我们的位数不够的时候,会使用等号来补齐
    在这里插入图片描述
    入门Demo

    
    import com.sun.org.apache.xml.internal.security.utils.Base64;
    
    public class Base64Demo {
    	public static void main(String[] args) {
    		System.out.println(Base64.encode("1".getBytes()));
    		System.out.println(Base64.encode("ZD".getBytes()));
    		System.out.println(Base64.encode("郑".getBytes()));
    	}
    }
    
    

    Base64工具类

    package com.example.password_discipline.base64;
    
    import java.io.ByteArrayOutputStream;
    
    /**
     * base64 format encoding & decoding
     */
    public class Base64 {
    
    	private static char[] base64EncodeChars = new char[] { 'A', 'B', 'C', 'D',
    			'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q',
    			'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd',
    			'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q',
    			'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3',
    			'4', '5', '6', '7', '8', '9', '+', '/' };
    
    	private static byte[] base64DecodeChars = new byte[] { -1, -1, -1, -1, -1,
    			-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
    			-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
    			-1, -1, -1, -1, 62, -1, -1, -1, 63, 52, 53, 54, 55, 56, 57, 58, 59,
    			60, 61, -1, -1, -1, -1, -1, -1, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
    			10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1,
    			-1, -1, -1, -1, -1, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37,
    			38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, -1, -1, -1,
    			-1, -1 };
    
    	private Base64(){
    	}
    
    	public static String encode(byte[] data){
    		StringBuffer sb = new StringBuffer();
    		int len = data.length;
    		int i = 0;
    		int b1, b2, b3;
    
    		while (i < len) {
    			b1 = data[i++] & 0xff;
    			if (i == len) {
    				sb.append(base64EncodeChars[b1 >>> 2]);
    				sb.append(base64EncodeChars[(b1 & 0x3) << 4]);
    				sb.append("==");
    				break;
    			}
    			b2 = data[i++] & 0xff;
    			if (i == len) {
    				sb.append(base64EncodeChars[b1 >>> 2]);
    				sb.append(base64EncodeChars[((b1 & 0x03) << 4)
    						| ((b2 & 0xf0) >>> 4)]);
    				sb.append(base64EncodeChars[(b2 & 0x0f) << 2]);
    				sb.append("=");
    				break;
    			}
    			b3 = data[i++] & 0xff;
    			sb.append(base64EncodeChars[b1 >>> 2]);
    			sb.append(base64EncodeChars[((b1 & 0x03) << 4)
    					| ((b2 & 0xf0) >>> 4)]);
    			sb.append(base64EncodeChars[((b2 & 0x0f) << 2)
    					| ((b3 & 0xc0) >>> 6)]);
    			sb.append(base64EncodeChars[b3 & 0x3f]);
    		}
    		return sb.toString();
    	}
    
    	public static byte[] decode(String str){
    		byte[] data = str.getBytes();
    		int len = data.length;
    		ByteArrayOutputStream buf = new ByteArrayOutputStream(len);
    		int i = 0;
    		int b1, b2, b3, b4;
    
    		while (i < len) {
    
    			/* b1 */
    			do {
    				b1 = base64DecodeChars[data[i++]];
    			} while (i < len && b1 == -1);
    			if (b1 == -1) {
    				break;
    			}
    
    			/* b2 */
    			do {
    				b2 = base64DecodeChars[data[i++]];
    			} while (i < len && b2 == -1);
    			if (b2 == -1) {
    				break;
    			}
    			buf.write(((b1 << 2) | ((b2 & 0x30) >>> 4)));
    
    			/* b3 */
    			do {
    				b3 = data[i++];
    				if (b3 == 61) {
    					return buf.toByteArray();
    				}
    				b3 = base64DecodeChars[b3];
    			} while (i < len && b3 == -1);
    			if (b3 == -1) {
    				break;
    			}
    			buf.write((((b2 & 0x0f) << 4) | ((b3 & 0x3c) >>> 2)));
    
    			/* b4 */
    			do {
    				b4 = data[i++];
    				if (b4 == 61) {
    					return buf.toByteArray();
    				}
    				b4 = base64DecodeChars[b4];
    			} while (i < len && b4 == -1);
    			if (b4 == -1) {
    				break;
    			}
    			buf.write((((b3 & 0x03) << 6) | b4));
    		}
    		return buf.toByteArray();
    	}
    
    	public static void main(String[] args) {
    		System.out.println(Base64.encode("1".getBytes()));
    		System.out.println(Base64.encode("ZD".getBytes()));
    	}
    }
    
    

    AES: 高级数据加密

    AES 加密算法是密码学中的 高级加密标准,该加密算法采用 对称分组密码体制,
    密钥长度的最少支持为 128 位、 192 位、256 位,分组长度 128 位,
    算法应易于各种硬件和软件实现。这种加密算法是美国联邦政府采用的 区块加密标准。
    AES 本身就是为了取代 DES 的,AES 具有更好的 安全性、效率 和 灵活性。

    入门Demo
    AES 加密解密和 DES 加密解密代码一样,只需要修改加密算法就行,拷贝 ESC 代码

    package com.atguigu.desaes;
    import com.sun.org.apache.xml.internal.security.utils.Base64;
    
    import javax.crypto.Cipher;
    import javax.crypto.spec.SecretKeySpec;
    
    public class AesDemo {
        // DES加密算法,key的大小必须是8个字节
    
        public static void main(String[] args) throws Exception {
            String input ="硅谷";
            // AES加密算法,比较高级,所以key的大小必须是16个字节
            String key = "1234567812345678";
    
            String transformation = "AES"; // 9PQXVUIhaaQ=
            // 指定获取密钥的算法
            String algorithm = "AES";
            // 先测试加密,然后在测试解密
            String encryptDES = encryptDES(input, key, transformation, algorithm);
            System.out.println("加密:" + encryptDES);
            String s = dncryptDES(encryptDES, key, transformation, algorithm);
            System.out.println("解密:" + s);
    
        }
    
        /**
         * 使用DES加密数据
         *
         * @param input          : 原文
         * @param key            : 密钥(DES,密钥的长度必须是8个字节)
         * @param transformation : 获取Cipher对象的算法
         * @param algorithm      : 获取密钥的算法
         * @return : 密文
         * @throws Exception
         */
        private static String encryptDES(String input, String key, String transformation, String algorithm) throws Exception {
            // 获取加密对象
            Cipher cipher = Cipher.getInstance(transformation);
            // 创建加密规则
            // 第一个参数key的字节
            // 第二个参数表示加密算法
            SecretKeySpec sks = new SecretKeySpec(key.getBytes(), algorithm);
            // ENCRYPT_MODE:加密模式
            // DECRYPT_MODE: 解密模式
            // 初始化加密模式和算法
            cipher.init(Cipher.ENCRYPT_MODE,sks);
            // 加密
            byte[] bytes = cipher.doFinal(input.getBytes());
    
            // 输出加密后的数据
            String encode = Base64.encode(bytes);
    
            return encode;
        }
    
        /**
         * 使用DES解密
         *
         * @param input          : 密文
         * @param key            : 密钥
         * @param transformation : 获取Cipher对象的算法
         * @param algorithm      : 获取密钥的算法
         * @throws Exception
         * @return: 原文
         */
        private static String dncryptDES(String input, String key, String transformation, String algorithm) throws Exception {
            // 1,获取Cipher对象
            Cipher cipher = Cipher.getInstance(transformation);
            // 指定密钥规则
            SecretKeySpec sks = new SecretKeySpec(key.getBytes(), algorithm);
            cipher.init(Cipher.DECRYPT_MODE, sks);
            // 3. 解密
            byte[] bytes = cipher.doFinal(Base64.decode(input));
    
            return new String(bytes);
        }
    }
    

    运行程序:AES 加密的密钥key , 需要传入16个字节
    在这里插入图片描述
    再运行程序
    在这里插入图片描述

    加密模式

    加密模式:https://docs.oracle.com/javase/8/docs/api/javax/crypto/Cipher.html
    

    ECB
    ECB : Electronic codebook, 电子密码本. 需要加密的消息按照块密码的块大小被分为数个块,并对每个块进行独立加密
    在这里插入图片描述

    • 优点 : 可以并行处理数据
    • 缺点 : 同样的原文生成同样的密文, 不能很好的保护数据
    • 同时加密,原文是一样的,加密出来的密文也是一样的

    CBC
    CBC : Cipher-block chaining, 密码块链接. 每个明文块先与前一个密文块进行异或后,再进行加密。在这种方法中,每个密文块都依赖于它前面的所有明文块
    在这里插入图片描述

    • 优点 : 同样的原文生成的密文不一样
    • 缺点 : 串行处理数据.

    填充模式

    当需要按块处理的数据, 数据长度不符合块处理需求时, 按照一定的方法填充满块长的规则

    NoPadding

    • 不填充.
    • 在DES加密算法下, 要求原文长度必须是8byte的整数倍
    • 在AES加密算法下, 要求原文长度必须是16byte的整数倍

    PKCS5Padding

    • 数据块的大小为8位, 不够就补足

    Tips

    • 默认情况下, 加密模式和填充模式为 : ECB/PKCS5Padding
    • 如果使用CBC模式, 在初始化Cipher对象时, 需要增加参数, 初始化向量IV : IvParameterSpec iv = new
      IvParameterSpec(key.getBytes());

    加密模式和填充模式

    AES/CBC/NoPadding (128)
    AES/CBC/PKCS5Padding (128)
    AES/ECB/NoPadding (128)
    AES/ECB/PKCS5Padding (128)
    DES/CBC/NoPadding (56)
    DES/CBC/PKCS5Padding (56)
    DES/ECB/NoPadding (56)
    DES/ECB/PKCS5Padding (56)
    DESede/CBC/NoPadding (168)
    DESede/CBC/PKCS5Padding (168)
    DESede/ECB/NoPadding (168)
    DESede/ECB/PKCS5Padding (168)
    RSA/ECB/PKCS1Padding (1024, 2048)
    RSA/ECB/OAEPWithSHA-1AndMGF1Padding (1024, 2048)
    RSA/ECB/OAEPWithSHA-256AndMGF1Padding (1024, 2048)
    

    加密模式和填充模式例子

    package com.atguigu.desaes;
    
    import com.sun.org.apache.xml.internal.security.utils.Base64;
    
    import javax.crypto.Cipher;
    import javax.crypto.spec.IvParameterSpec;
    import javax.crypto.spec.SecretKeySpec;
    
    public class DesDemo {
        // DES加密算法,key的大小必须是8个字节
    
        public static void main(String[] args) throws Exception {
            String input ="硅谷";
            // DES加密算法,key的大小必须是8个字节
            String key = "12345678";
            // 指定获取Cipher的算法,如果没有指定加密模式和填充模式,ECB/PKCS5Padding就是默认值
            //     String transformation = "DES"; // 9PQXVUIhaaQ=
            //String transformation = "DES/ECB/PKCS5Padding"; // 9PQXVUIhaaQ=
            // CBC模式,必须指定初始向量,初始向量中密钥的长度必须是8个字节
            //String transformation = "DES/CBC/PKCS5Padding"; // 9PQXVUIhaaQ=
            // NoPadding模式,原文的长度必须是8个字节的整倍数 ,所以必须把 硅谷改成硅谷12
            String transformation = "DES/CBC/NoPadding"; // 9PQXVUIhaaQ=
            // 指定获取密钥的算法
            String algorithm = "DES";
            String encryptDES = encryptDES(input, key, transformation, algorithm);
            System.out.println("加密:" + encryptDES);
    //        String s = dncryptDES(encryptDES, key, transformation, algorithm);
    //        System.out.println("解密:" + s);
    
        }
    
        /**
         * 使用DES加密数据
         *
         * @param input          : 原文
         * @param key            : 密钥(DES,密钥的长度必须是8个字节)
         * @param transformation : 获取Cipher对象的算法
         * @param algorithm      : 获取密钥的算法
         * @return : 密文
         * @throws Exception
         */
        private static String encryptDES(String input, String key, String transformation, String algorithm) throws Exception {
            // 获取加密对象
            Cipher cipher = Cipher.getInstance(transformation);
            // 创建加密规则
            // 第一个参数key的字节
            // 第二个参数表示加密算法
            SecretKeySpec sks = new SecretKeySpec(key.getBytes(), algorithm);
            // ENCRYPT_MODE:加密模式
            // DECRYPT_MODE: 解密模式
             // 初始向量,参数表示跟谁进行异或,初始向量的长度必须是8位
    //        IvParameterSpec iv = new IvParameterSpec(key.getBytes());
             // 初始化加密模式和算法
            cipher.init(Cipher.ENCRYPT_MODE,sks);
            // 加密
            byte[] bytes = cipher.doFinal(input.getBytes());
    
            // 输出加密后的数据
            String encode = Base64.encode(bytes);
    
            return encode;
        }
    
        /**
         * 使用DES解密
         *
         * @param input          : 密文
         * @param key            : 密钥
         * @param transformation : 获取Cipher对象的算法
         * @param algorithm      : 获取密钥的算法
         * @throws Exception
         * @return: 原文
         */
        private static String dncryptDES(String input, String key, String transformation, String algorithm) throws Exception {
            // 1,获取Cipher对象
            Cipher cipher = Cipher.getInstance(transformation);
            // 指定密钥规则
            SecretKeySpec sks = new SecretKeySpec(key.getBytes(), algorithm);
    //        IvParameterSpec iv = new IvParameterSpec(key.getBytes());
            cipher.init(Cipher.DECRYPT_MODE, sks);
            // 3. 解密
            byte[] bytes = cipher.doFinal(Base64.decode(input));
    
            return new String(bytes);
        }
    }
    
    

    运行程序:
    在这里插入图片描述
    修改成 CBC 加密 模式

     String transformation = "DES/CBC/PKCS5Padding";
    

    运行 ,报错,需要添加一个参数
    在这里插入图片描述
    修改加密代码:
    在这里插入图片描述
    运行程序
    在这里插入图片描述
    修改填充模式

    String transformation = "DES/CBC/NoPadding";
    

    运行报错 NoPadding 这种填充模式 原文必须是8个字节的整倍数
    在这里插入图片描述
    修改运行
    在这里插入图片描述
    在测试 AES 的时候需要注意,key需要16个字节,加密向量也需要16个字节 ,其他方式跟 DES 一样

    推荐同系列文章

    keytool openssl : https://blog.csdn.net/xiaozhegaa/article/details/109602118
    密码学 ~ 数字签名: https://blog.csdn.net/xiaozhegaa/article/details/109601966
    密码学 ~ 非对称加密 RSA ECC: https://blog.csdn.net/xiaozhegaa/article/details/109601632
    密码学 ~ 消息摘要: https://blog.csdn.net/xiaozhegaa/article/details/109601148
    对称加密、DES加解密、AES加解密、Base64加解密: https://blog.csdn.net/xiaozhegaa/article/details/109595399

    展开全文
  •  DES(Data Encryption Standard)数据加密标准算法,属于密码体制中的对称密码体制。是美国国家标准研究所提出的算法。因为加解密的数据安全性和密钥长度成正比。DES的56位的密钥已经形成安全隐患,在1998年之后就很...

            DES(Data Encryption Standard)数据加密标准算法,属于密码体制中的对称密码体制。是美国国家标准研究所提出的算法。因为加解密的数据安全性和密钥长度成正比。DES的56位的密钥已经形成安全隐患,在1998年之后就很少被采用。但是一些老旧的系统还在使用。因为这个DES算法并没有被美国标准委员会公布全部算法,大家一致怀疑被留了后门。所以慢慢就被淘汰掉了。

            后来针对DES算法进行了改进,有了三重DES算法(DESede)。针对DES算法的密钥长度较短以及迭代次数偏少问题做了相应改进,提高了安全强度。不过DESede算法处理速度较慢,密钥计算时间较长,加密效率不高问题使得对称加密算法的发展不容乐观。

     

     

    一、ECB模式

     

    ECB(Electronic Code book电码本)模式,相对简单,将数据按照每8字节一段进行DES加解密的(一次加解密操作必须是8字节,这是算法决定的),如果最后一段不足8字节,则按照需要补0x00或者0xFF进行计算.之后按照数据顺序将所有的数据连接在一起。由此可见,使用ECB模式,各段数据是没有联系的,这正是和CBC模式的最重要的区别。

     

     

    二、CBC模式

     

    CBC(Cipher-block chaining密文分组链接)模式,该模式使得各段数据存在一些联系,实现原理比较复杂。相比ECB,它需要初始化IV向量。

     

     

    文献出自:

    http://blog.csdn.net/kongqz/article/details/6284728

    http://www.tekuba.net/program/297/

    展开全文
  • 下面算法中,不属于公开密钥加密算法的是()。D A.ECC B.DSA C.RSA D.DES 常用的公钥加密算法有RSA、DSA、ElGamal和ECC。 常用的对称加密算法有DES、3DES、IDEA、AES、Blowfish、Twofish和RSA公司的RC系列算法...

    下面算法中,不属于公开密钥加密算法的是()。D

    A.ECC
    B.DSA
    C.RSA
    D.DES

    常用的公钥加密算法有RSA、DSA、ElGamal和ECC。

    常用的对称加密算法有DES、3DES、IDEA、AES、Blowfish、Twofish和RSA公司的RC系列算法(如RC2、RC4、RC5、RC6)等。

    采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密,这种加密方法称为对称加密,也称为单密钥加密。

    公钥加密,也叫非对称(密钥)加密(public key encryption),属于通信科技下的网络安全二级学科,指的是由对应的一对唯一性密钥(即公开密钥和私有密钥)组成的加密方法。

    作者:dream_网络安全
    来源:CSDN
    原文:https://blog.csdn.net/weixin_42859280/article/details/90179154
    版权声明:本文为博主原创文章,转载请附上博文链接!

    展开全文
  • 2.非加密算法,属于哈希散列,不可逆,用于检验数据完整性。二、安全散列(哈希)算法SHA:1.包含的散列算法:SHA-1,SHA-224,SHA-256,SHA-384,和SHA-512。2.系统库位置:。3.SHA同样是散列算法,非加密算法。SHA...
    一、信息摘要算法5:MD5
    1.系统库位置:<CommonCrypto/CommonHMAC.h>。
    2.非加密算法,属于哈希散列,不可逆,用于检验数据完整性。

    二、安全散列(哈希)算法SHA:
    1.包含的散列算法:SHA-1,SHA-224,SHA-256,SHA-384,和SHA-512。
    2.系统库位置:<CommonCrypto/CommonHMAC.h>。
    3.SHA同样是散列算法,非加密算法。SHA基于MD5实现。

    三、对称加密:
    1.包含的加密算法:DES、3DES、AES、AES128等。
    2.系统库位置:<CommonCrypto/CommonCryptor.h>的CCCrypt方法

    四、非对称加密:
    1.包含的加密算法:RSA
    2.系统库位置:Security框架,主要有四个方法:
     (1)SecKeyEncrypt:使用公钥对明文加密。
     (2)SecKeyDecrypt:使用私钥对密文解密。
     (3)SecKeyRawSign:使用私钥对明文加签,生成数字签名。
     (4)SecKeyRawVerify:使用公钥对明文和数字签名验签,返回0代表验签通过。
    3.通常用法:加密和解密用来保证数据安全,加签和验签用来防篡改。通常结合在一起使,步骤如下:
     (1)发起方使用接收方的公钥对明文加密,生成密文。
     (2)发起方使用自己的私钥对明文加签,生成数字签名。
     (3)接收方使用自己的私钥对密文解密,得到明文。
     (4)接收方使用发起方的公钥对明文和数字签名验签,检测是否是发起方发起的请求。
    4.证书格式:DER、PEM、P12是生成密钥可选择的文件格式。
     (1)DER是Distinguished Encoding Rules的简称,是一种信息传输语法规则。
           在iOS端,我们的公钥使用的是DER格式的文件,可以从SecCertificateCreateWithData函数的data参数的说明中看到。
     (2)P12用于存放个人证书/私钥,他通常包含保护密码,2进制方式。
           在iOS端,我们的私钥使用的是P12格式的文件,可以从SecPKCS12Import函数的pkcs12_data参数说明看到。
     (3)而PEM格式是一种对DER进行封装的格式,他只是把der的内容进行了base64编码并加上了头尾说明。
     (4)OPENSSL命令行默认输出的都是PEM格式的文件,要能够在iOS下使用,我们需要指定使用DER或者先生成PEM然后转换成DER。P12格式也一样。
    5.附图示:
    (1)1、2、3、4为苹果提供的API。
    (2)3可以理解为私钥加密。
    (3)4中隐含公钥解密过程。首先将数字签名解密,然后和明文的SHA1值对比,看是否一致。
    展开全文
  • AES加密-JAVA实现

    2019-06-29 00:40:02
    在写CP-ABE系统的时间使用AES加密密文文件,ABE加密了一个Element(JPBC库),属于常见的加密体制。 下面代码的AES,一个是以文件流的形式加密文件,一个是直接加密字符串 代码部分 public class Aes { private ...
  • 加密芯片——AES算法特点与应用注意事项

    千次阅读 热门讨论 2017-06-21 14:05:49
    AES是一种区块加密标准算法,它的提出是为了升级替换原有的DES加密算法。因此它的安全强度高于DES算法。但不应片面理解,系统和数据的安全不仅与应用的加密算法有关,更与加密应用方案有关。和DES算法一样,AES也...
  • AES加密--JAVA实现

    2019-06-29 21:21:36
    在写CP-ABE系统的时间使用AES加密密文文件,ABE加密了一个Element(JPBC库),属于常见的加密体制。 下面代码的AES,一个是以文件流的形式加密文件,一个是直接加密字符串 代码部分 public class Aes { private ...
  • 在一次开发中,我们属于服务平台开发很多接口,供其他各个公司的各个系统调用存取数据,但是由于数据安全的问题,领导要求对数据进行加密传输,并且不让自己写算法实现,经过决定,最终采用AES加密算法进行加密,...
  • 3. DES加密算法属于对称加密算法,它所使用的密钥长度为 位。 4. 按照处理信息的方式分类,可以把设备分为字符设备和 两大类。 5. 系统中各进程之间逻辑上的相互制约关系称为 。 6. 若信号量S的初值定义为9,当对S...
  • 16.数据库系统 PAGE14 / NUMPAGES14 试题1(2019年上半年试题6~7) 非对称加密算法中加密和解密使用不同的密钥下面的加密算法中(6)属于非对称加密算法若甲 乙采用非对称密钥体系进行保密通信甲用乙的公钥加密数据文件...
  • 1、在程序的执行过程中,Cache与主存的地址影映像是有硬件自动完成的。(为了提高速度)2、指令寄存器的位数...5、ECC、DSA和RSA属于公开密钥加密算法,DES是典型的私钥加密算法6、矢量图是常用的图形图像表示形式,图
  • 这种加密系统又称为对称密钥系统。 数据加密标准 DES 数据加密标准 DES 属于对称密钥密码体制,是一种分组密码。 在加密前,先对整个明文进行分组。每一个组长为 64 位。 然后对每一个 64 位 二进制数据进行加密...
  • AES

    2020-11-19 11:28:28
    AES是一种区块加密标准算法,它的提出是为了升级替换原有的DES加密算法。因此它的安全强度高于DES算法。但不应片面理解,系统和数据的安全不仅与应用的加密算法有关,更与加密应用方案有关。和DES算法一样,AES也...
  • 1.AES是一种区块加密标准算法,它的提出是为了升级替换原有的DES加密算法。因此它的安全强度高于DES算法。但不应片面理解,系统和数据的安全不仅与应用的加密算法有关,更与加密应用方案有关。和DES算法一样,AES也...
  • 密码学基础

    2018-09-25 10:13:11
    有两件事的发生将密码学带入了公众领域:标准加密系统——数据加密标准(Data Encryption Standard,DES)的诞生和公钥加密算法(也称为非对称加密算法)的发明[1]。密码学伴随着密码分析学的发展而...
  • 采用美国数据加密标准DES进行数据加密时,加密算法中的基本运算不包括【A】。 A.模幂运算 B.排列运算 C.替换运算(S 盒子) D.移位运算 常规的数据加密标准DES采用【B】有效密钥位对64位的数据块进行加密。 A.64 ...
  • 远程桌面服务器登录密码采用DES加密,密钥为登录本客户端的密码 以上2点保证了本客户端数据的安全,如果忘记了登录密码,即使软件作者也无法破解 强大的分类管理功能,可以为一个远程桌面连接设置属于多个分类 ...
  • PGP加密系统不仅可以对邮件进行加密,还可以对 文件 、 硬盘 等进行加密。 RBAC模型的基本成分是 用户 、权限和 角色 。 在入侵检测系统(IDS)的使用中存在下列四种情况,它们分别属于什么行为。①网络行为正常...
  • 远程桌面服务器登录密码采用DES加密,密钥为登录本客户端的密码 以上2点保证了本客户端数据的安全,如果忘记了登录密码,即使软件作者也无法破解 强大的分类管理功能,可以为一个远程桌面连接设置属于多个分类 ...
  • java源码包---java 源码 大量 实例

    千次下载 热门讨论 2013-04-18 23:15:26
     Java非对称加密源程序代码实例,本例中使用RSA加密技术,定义加密算法可用 DES,DESede,Blowfish等。  设定字符串为“张三,你好,我是李四”  产生张三的密钥对(keyPairZhang)  张三生成公钥(publicKeyZhang...
  • 概述 ***仅Python 3 *** (Python 2已于2020年弃用) ***严格遵循docs / preparation_notes.txt非常重要。... 合作伙伴正在使用弱加密技术(例如RC4或Single-DES),并且没有安装或管理密钥的安全方法。 例如,
  • java源码包2

    千次下载 热门讨论 2013-04-20 11:28:17
     Java非对称加密源程序代码实例,本例中使用RSA加密技术,定义加密算法可用 DES,DESede,Blowfish等。  设定字符串为“张三,你好,我是李四”  产生张三的密钥对(keyPairZhang)  张三生成公钥(publicKeyZhang...
  • java源码包3

    千次下载 热门讨论 2013-04-20 11:30:13
     Java非对称加密源程序代码实例,本例中使用RSA加密技术,定义加密算法可用 DES,DESede,Blowfish等。  设定字符串为“张三,你好,我是李四”  产生张三的密钥对(keyPairZhang)  张三生成公钥(publicKeyZhang...
  • java源码包4

    千次下载 热门讨论 2013-04-20 11:31:44
     Java非对称加密源程序代码实例,本例中使用RSA加密技术,定义加密算法可用 DES,DESede,Blowfish等。  设定字符串为“张三,你好,我是李四”  产生张三的密钥对(keyPairZhang)  张三生成公钥(publicKeyZhang...
  • Java非对称加密源码实例 1个目标文件 摘要:Java源码,算法相关,非对称加密 Java非对称加密源程序代码实例,本例中使用RSA加密技术,定义加密算法可用 DES,DESede,Blowfish等。 设定字符串为“张三,你好,我是李四”...
  • Java非对称加密源码实例 1个目标文件 摘要:Java源码,算法相关,非对称加密 Java非对称加密源程序代码实例,本例中使用RSA加密技术,定义加密算法可用 DES,DESede,Blowfish等。 设定字符串为“张三,你好,我是李四”...
  • Java非对称加密源码实例 1个目标文件 摘要:Java源码,算法相关,非对称加密 Java非对称加密源程序代码实例,本例中使用RSA加密技术,定义加密算法可用 DES,DESede,Blowfish等。 设定字符串为“张三,你好,我是李四”...
  • JAVA上百实例源码以及开源项目

    千次下载 热门讨论 2016-01-03 17:37:40
     Java非对称加密源程序代码实例,本例中使用RSA加密技术,定义加密算法可用 DES,DESede,Blowfish等。  设定字符串为“张三,你好,我是李四”  产生张三的密钥对(keyPairZhang)  张三生成公钥(publicKeyZhang...
  • 10、 DES算法属于对称加密体制。 11、 有Mastercard和Visa共同推出的基于INTERNET的卡式支付安全标准为SET。 12、 数据处理大致经过三个发展阶段,它们分别是人工管理过程、文件系统管理阶段和数据库系统管理阶段。 ...

空空如也

空空如也

1 2
收藏数 35
精华内容 14
关键字:

des加密系统属于