为了账号安全,请及时绑定邮箱和手机立即绑定
  • 感觉讲的不是很细,就是纯粹的API
    查看全部
  • public class DESDemo { private static String src = "mayue des"; public static void main(String[] args) { try { //生成key KeyGenerator generator = KeyGenerator.getInstance("DES"); generator.init(56); SecretKey secretKey = generator.generateKey(); byte[] keyCode = secretKey.getEncoded(); //key转换 DESKeySpec desKeySpec = new DESKeySpec(keyCode); SecretKeyFactory factory = SecretKeyFactory.getInstance("DES"); SecretKey converyKeyCode = factory.generateSecret(desKeySpec); //加密 Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding"); cipher.init(Cipher.ENCRYPT_MODE, converyKeyCode); byte[] rlt = cipher.doFinal(src.getBytes()); System.out.println("jdk des encrypt:"+Hex.encodeHexString(rlt)); //解密 cipher.init(Cipher.DECRYPT_MODE, converyKeyCode); rlt = cipher.doFinal(rlt); System.out.println("jdk des decrypt:"+new String(rlt)); } catch (Exception e) { e.printStackTrace(); } } }
    查看全部
  • 课程中没有讲到DES的原理 我相信点进来的同学们应该也不仅仅满足于API的使用吧 而且知道了原理后我相信对理解代码肯定也会有更多的帮助 我就写成笔记分享一下,顺便当作复习 希望能帮到大家.
    对称加密算法也分成两类:Stream和Block   (大家熟知的DES AES都属于Block)

    https://img1.sycdn.imooc.com//5b59ff5500015b1d09200545.jpg
    这个就是DES原理图 我从某个课件中截取下来的 首先从Key开始吧

    Key:为什么是64bit呢?据说好像是发明的那些大佬们定下的标准- -
    64bit能够表示16个16进制的数(4个二进制表示一个16进制),所以这个key input的例子就可以是这样:AABB09182736CCDD
    然后我们要做的就是将他变成二进制 例如
    1 0 1 0(A) 1 0 1 0(A)
    1 0 1 1(B) 1 0 1 1(B)

    ............

    如此类推写成一个8*8的表格 并且从1-64 第一行开始左往右这样编号
    接下来会经过一个PC-1的表,这个PC-1的操作就是将8,16,24,32,40,48,56,64这8个位上的数字去除
    从而key序列就只有56位了

    https://img1.sycdn.imooc.com//5b5a063500011ff703940316.jpg

    https://img1.sycdn.imooc.com//5b5a063600017eac03880422.jpg

    然后将原来64位的序列分成C D两个串 按照上面的号码对号入座重新组成C D
    例如原57 变成C的1 49变成C的2 如此类推  

    接下来的操作就是分布左移两个字符串C D

    https://img1.sycdn.imooc.com//5b5a0784000195b207120118.jpg
    理论上key round要完成16次 所以是1-16 每个round就要左移对应的次数.
    例如6th round:1+1+2+2+2+2=10 所以C 和 D就要左移10次  每个round都要 所以每个round的key都是不一样的..
    移动完之后只需要重新C+D合起来 这时仍然是56位 再经过PC-2表的操作 相应对号入座就会得出一个48位的key.
    https://img1.sycdn.imooc.com//5b5a08a200013ccd02560273.jpg

    Key generation的步骤就是这样 每个round都会重新生成key 循环16次结束
    以上笔记纯手打  可能会有错误的地方 欢迎指正或者补充... 谢谢

    查看全部
  • 3DES
    查看全部
  • 对称加密算法回顾:<br> 1:DES是最基本的算法,出身比较好美国军方通过IBM来实现的<br> 2:3DES由于DES有漏洞不安全,所以,产生了3DES,应用更加的广泛,不过效率不高,所以才有了后来的AES<br> 3:AES是应用更加广泛的一种对称加密算法,安全性更高<br> 4:PBE本质是其他对称加密算法一种综合,加入了盐(随机字符串)防止密码的暴力破解 注意:实际的加密解密不是在一起的,通常是将秘要发送给解密的那一方来实现的,或者实现约定好了的
    查看全部
  • 对称加密算法-DES
    查看全部
  • 之前的笔记讲解了key 接下来是input的64bit. 为了方便 我还是把原理图放出来吧
    https://img1.sycdn.imooc.com//5b5a0c3600015b1d09200545.jpg
    64bit input会经过IP表格的操作 拆分成L和R两个32位的串 其实就是对号入座而已 并不难理解

    例如:Plaintext=123456ABCD132536

    IP之后就是L0=14A7D678 R0=18CA18AD(运算都是以16进制的原文对应的二进制为基础进行运算)

    https://img1.sycdn.imooc.com//5b5a0c740001db4d03780280.jpg

    https://img1.sycdn.imooc.com//5b5a0c750001bed904640281.jpg

    之后L的操作比较少  主要集中在R上面 然后R的所有操作有个名词 Feistel function(名字好像是这个) 就是指的蓝色区域
    接下来是Expansion function 这个函数的主要操作就是把32位的R扩展成48位
    例如AABBCCDD 32bit的16进制序列
    1010(A) 1010(A)...... 1101(D)
    我们要做的就是首尾相连  例如第一个A就会扩展成110101(第一位是D的最后一位 最后一位是第二个A的第一位)    第二个A:010101(第一位是A的最后一位 最后一位是B的第一位)
    以上操作后我们就会得到48bit的R  然后和key进行XOR运算 这个大家都懂 就不说了

    轮到S-box的48变32
    https://img1.sycdn.imooc.com//5b5a0fd900013f6c09310179.jpg
    我们继续用上面的例子110101  加粗的1010为column 11为row 在box中找到对应的10进制数字再换成16进制即可 这时结果是3:0011  或者参考图中例子也可以

    这样就从6*8 变成4*8的32bit
    https://img1.sycdn.imooc.com//5b5a10ec0001768702600286.jpg
    然后经过feistel最后的P表格操作  得出的新序列R再次和之前的L进行XOR运算  从而得出R1,即第一次变换后的R1(按照上面的例子来算的话 R1=5A78E394)
    从原理图可以知道L的下一个序列就是原来的R 意思就是L1=R0 L2=R1 如此类推 完成16次循环.

    https://img1.sycdn.imooc.com//5b5a124d0001027104250270.jpg
    最后的最后 IP-1表格操作,对号入座 得到最终的64bit(L+R)
    到此DES的大概流程和原理就完了 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; }
    查看全部
  • Java实现对称加密——对称加密算法--PBE VI Ps:个人觉得:PBE>AES>3DES>DES。 【温馨提示:JavaSE/EE、SSH/SSM、Hybrid APP、JQ/JS/CSS3/H5等编程爱好者关注我,加我慕课好友,互相学习,共同进步!】
    查看全部
  • Java实现对称加密——对称加密算法--PBE V Ps1:盐:指的是“干扰”黑客的字符,比如一些随机的字符串、数字等。 Ps2:new PBEParameterSpec(盐,迭代次数);。 【温馨提示:JavaSE/EE、SSH/SSM、Hybrid APP、JQ/JS/CSS3/H5等编程爱好者关注我,加我慕课好友,互相学习,共同进步!】
    查看全部
  • Java实现对称加密——对称加密算法--PBE IV 【温馨提示:JavaSE/EE、SSH/SSM、Hybrid APP、JQ/JS/CSS3/H5等编程爱好者关注我,加我慕课好友,互相学习,共同进步!】
    查看全部
  • Java实现对称加密——对称加密算法--PBE III 【温馨提示:JavaSE/EE、SSH/SSM、Hybrid APP、JQ/JS/CSS3/H5等编程爱好者关注我,加我慕课好友,互相学习,共同进步!】
    查看全部
  • Java实现对称加密——对称加密算法--PBE II 【温馨提示:JavaSE/EE、SSH/SSM、Hybrid APP、JQ/JS/CSS3/H5等编程爱好者关注我,加我慕课好友,互相学习,共同进步!】
    查看全部
  • Java实现对称加密——对称加密算法--PBE I Ps:PBE算法结合了消息摘要算法和对称加密算法的优点。 【温馨提示:JavaSE/EE、SSH/SSM、Hybrid APP、JQ/JS/CSS3/H5等编程爱好者关注我,加我慕课好友,互相学习,共同进步!】
    查看全部
首页上一页1234567下一页尾页

举报

0/150
提交
取消
课程须知
1、需具备Java面向对象的基础 2、需学习《JAVA实现Base64加密》课程的第一章,了解Java加解密的基础知识。奉上链接:http://www.imooc.com/learn/285
老师告诉你能学到什么?
1、掌握对称加密算法在Java中的实现 2、了解对称加密算法的应用场景

微信扫码,参与3人拼团

意见反馈 帮助中心 APP下载
官方微信
友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!