-
解密对应的前两个步骤是一样的,只有第三步需要将模式设置为解密查看全部
-
jdkDES 注意,在生成key的时候需要指定keysize,默认是56位 Cipher的参数是“加解密算法/工作方式/填充方式”查看全部
-
对称加密算法是一种初等的加密算法,安全程度一般。 DES(Data Encryption Standard)是一种实现,后来衍生出来3EDS. 98年以后DES不断的被破解,目前已经不具备安全性查看全部
-
传统的对称加密算法就是构建密钥,指定算法,然后发送数据前用密钥与算法加密数据,密钥和加密后的数据一起发送给对方,对方拿着密钥对数据进行解密. 密钥一般很少在网络上传播.查看全部
-
步骤: 1.根据算法创建key生成器 2.指定密钥长度 3.生成密钥对象 4.获取密钥 5.转换密钥,有两种方式 1.使用SecretKeySpec,构造参数为密钥、算法名,直接返回SecretKey.该方式适用于MAC、AES 2.使用XXXKeySpec,构造参数密钥,再使用SecretKeyFactory的getInstance(),参数是算法名,然后再使用generateSecret()方法,参数是XXXKeySpec.该方式适用于DES. 6.创建密码对象Cipher,参数是算法/工作模式/填充方式. 7.初始化密钥,参数是加解密模式、密钥. 8.执行方法,doFinal(byte[] b)查看全部
-
JDK实现AES算法 因为AES是替代DES的算法,因此在实现方式上是非常接近的. //生成KeyGenerator KeyGenerator keyGenerator = KeyGenerator.getInstance("AES"); //设置密钥长度 keyGenerator.init(128); //keyGenerator.init(new SecureRandom()); //生成密钥对象 SecretKey secretKey=keyGenerator.generateKey(); //获取密钥 byte [] data1 = secretKey.getEncoded(); //转化密钥 SecretKey secretKey = new SecretKeySpec(data1, "AES"); Cipher cipher=Cipher.getInstance("AES/ECB/PKCSS5Padding"); //初始化,设置为加密 cipher.init(Cipher.ENCRYPT_MODE,secretKey); byte [] b1 = cipher.doFinal("imooc".getBytes()); //初始化,设置为解密 cipher.init(Cipher.DECRYPT_MODE,secretKey); byte [] b2=cipher.doFinal(b1);查看全部
-
对称加密算法-AES AES是目前使用最多的对称加密算法.AES至今尚未被破解. AES通常用于移动通信系统加密以及基于SSH协议的软件.<br> AES是用来替代DES的. AES加密算法的默认密钥长度为128,还可以选择192、256. 注意:JDK实现AES算法,使用256位密钥长度时要获得无政策限制权限文件. BC不会存在该问题.查看全部
-
BC实现3DES算法与BC实现DES算法类似. 在使用KeyGenerator的init()方法时,参数要指定密钥的长度.可以直接指定一个数值.同时也可以使用SecureRandom实例作为参数,该实例的作用是获取KeyGenerator对应算法其默认的密钥长度. KeyGenerator kg = KeyGenerator.getInstance("DESede"); kg.init(168); //kg.init(new SecureRandom());查看全部
-
JDK实现3DES 与实现DES方式基本一致,算法名称要改为DESede,密钥长度为168,转换密钥时使用DESedeKeySpec类. 初始化密钥: public static byte[] initSecretKey(){ KeyGenerator kg = KeyGenerator.getInstance("DESede"); kg.init(168); SecretKey secretKey = kg.generateKey(); return secretKey.getEncoded(); } 转化密钥: private static Key toKey(byte[] key){ DESedeKeySpec dks = new DESedeKeySpec(key); SecretKeyFactory skf = SecretKeyFactory.getInstance("DESede"); SecretKey secretKey = skf.generateSecret(dks); return secretKey; } 加密: String cipherAlgorithm="DESede/ECB/PKCS5Padding"; public static byte[] encrypt(byte[] data,Key key,String cipherAlgorithm) { Cipher cipher = Cipher.getInstance(cipherAlgorithm); cipher.init(Cipher.ENCRYPT_MODE, key); return cipher.doFinal(data); } 解密: public static byte[] decrypt(byte[] data,Key key,String cipherAlgorithm){ Cipher cipher = Cipher.getInstance(cipherAlgorithm); cipher.init(Cipher.DECRYPT_MODE, key); return cipher.doFinal(data); }查看全部
-
3DES(3重DES) DES被很多密码学机构质疑,因为算法是半公开的,因此违反柯克霍夫原则. 因此在这个基础上,延伸了3重DES. 3重DES与DES的区别: 1.密钥长度增长(168) 2.迭代次数提高 3重DES在实际应用中是应用最多的.查看全部
-
对称加密算法的使用场景. 注意密钥是保密的,只给接收方知道,其他人是不允许知道的. 遵循柯克霍夫原则,即数据的安全基于密钥而不是算法的保密,即系统的安全取决于密钥,对密钥保密,对算法公开.查看全部
-
BC实现DES算法 直接使用Security.addProvider(new BouncyCastleProvider()); 为jdk提供其他算法提供商,此时便可以使用BC实现DES算法的工作模式与填充方式. 可以通过KeyGenerator的getProvider()方法获取当前使用提供商的名称. 可以在生成KeyGenerator的getInstance(String alogithm,String provicer)方法指定使用的提供商,默认是sun公司,即jdk自身. KeyGenerator keyGenerator=KeyGenerator.getInstance("DES","BC");查看全部
-
3.加密操作 Cipher意思为密码,Cipher实例用于加密与解密操作. 首先创建一个Cipher实例,使用Cipher类的getInstance()静态方法,参数是加密算法/工作模式/填充方式,以字符串形式. 使用Cipher实例的init()方法,通过还原密钥实例与设置执行模式为加密来初始化Cipher对象. 使用Cipher实例的doFinal(byte[] byte)方法执行加密操作,参数是待加密数据,以字节数组形式返回加密后的数据. String cipherAlgorithm="DES/ECB/PKCS5Padding"; public static byte[] encrypt(byte[] data,Key key,String cipherAlgorithm) { //实例化 Cipher cipher = Cipher.getInstance(cipherAlgorithm); //使用密钥初始化,设置为加密模式. cipher.init(Cipher.ENCRYPT_MODE, key); //执行操作,返回加密后的数据,以字节数组形式. return cipher.doFinal(data); } 4.解密操作 首先创建一个Cipher实例,使用Cipher类的getInstance()静态方法,参数是加密算法/工作模式/填充方式,以字符串形式. 使用Cipher实例的init()方法,通过密钥实例与设置执行模式为解密来初始化Cipher对象. 使用Cipher实例的doFinal(byte[] byte)方法执行解密操作,参数是待解密数据,以字节数组形式返回解密后的数据. public static byte[] decrypt(byte[] data,Key key,String cipherAlgorithm){ //实例化 Cipher cipher = Cipher.getInstance(cipherAlgorithm); //使用密钥初始化,设置为解密模式 cipher.init(Cipher.DECRYPT_MODE, key); //执行操作 return cipher.doFinal(data); }查看全部
-
因为SecretKey接口继承Key接口,因此方法返回类型可以直接为Key. 三种形式产生密钥 初始密钥: 1.SecretKey sk=KeyGenerator.generateKey(); (JDK初始化) 还原密钥: 2.SecretKey sk = new SecretKeySpec(byte [] key,"HmacMD5"); 3.使用SecretKeyFactory的generateSecret(DESKeySpec des)查看全部
-
JDK实现DES算法 1.初始化密钥 使用KeyGenerator类的getInstance()静态方法,获取生成指定算法的密钥生成器,参数是算法名称. 使用KeyGenerator类的init()方法进行密钥生成器的初始化,指定密钥生成器产生密钥的长度. 使用KeyGenerator类的generatorKey()方法生成一个密钥对象,返回SecretKey密钥对象. SecretKey为密钥对象.使用它的getEncoded()方法返回一个密钥(字节数组形式) public static byte[] initSecretKey(){ //返回生成指定算法密钥的KeyGenerator对象 KeyGenerator kg = KeyGenerator.getInstance("DES"); //初始化此密钥生成器,使其具有确定的密钥大小 kg.init(56); //生成一个密钥 SecretKey secretKey = kg.generateKey(); return secretKey.getEncoded(); } 2.转化密钥(还原密钥),将jdk生成的密钥对象转化成DES规则的密钥对象. 创建一个DESKeySpec实例,作用是将JDK初始化的密钥转化成DES规则的密钥. 构造方法参数是JDK生成的密钥(字节数组形式). 使用SecretKeyFactory类的getInstance()静态方法获取一个密钥工厂实例,参数是算法名称 使用SecretKeyFactory类的generateSecret()方法生成密钥,参数是DESKeySpec实例.返回SecretKey,返回的SecretKey实例就是符合DES算法的密钥. private static Key toKey(byte[] key){ //实例化DES密钥规则 DESKeySpec dks = new DESKeySpec(key); //实例化密钥工厂 SecretKeyFactory skf = SecretKeyFactory.getInstance("DES"); //生成密钥 SecretKey secretKey = skf.generateSecret(dks); return secretKey; }查看全部
举报
0/150
提交
取消