数据的加密与解密分析
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Week 8 数据的加密与解密(3)
• 任务: • 1. CBC的加密与解密 • 2. 非对称钥匙的生成 • 3. RSA的加密与解密 • 4. 使用密钥协定的加密与解密
1. CBC的加密与解密
• Java里面默认的加密模式为ECB(Electronic Code Book) 对明文进行单独的加密处理。
RSA的公钥、私钥的组成,以及加密、解密的公式可见于下表:
• RSA是目前最有影响力的公钥加密算法,它能够抵抗到目前为止已知 的绝大多数密码攻击,已被ISO推荐为公钥数据加密标准。
• 在公开密钥密码体制中,加密密钥(即公开密钥)PK是公开信息, 而解密密钥(即秘密密钥)SK是需要保密的。加密算法E和解密算法 D也都是公开的。虽然解密密钥SK是由公开密钥PK决定的,但却不 能根据PK计算出SK。
• (2).读取钥匙
– FileInputStream f1=new FileInputStream("key.dat"); – ObjectInputStream ob=new ObjectInputStream(f1); – Key k=(Key)ob.readObject( );
1.2 CBC解密思路
• 与对称加密算法不同,非对称加密算法需要两个密钥:公 开密钥(publickey)和私有密钥(privatekey)。公开密 钥与私有密钥是一对,如果用公开密钥对数据进行加密, 只有用对应的私有密钥才能解密;如果用私有密钥对数据 进行加密,那么只有用对应的公开密钥才能解密。因为加 密和解密使用的是两个不同的密钥,所以这种算法叫作非 对称加密算法。
• (3)生成密匙对,并获得公匙和私匙
– KeyPair kp=kpg.genKeyPair(); – PublicKey pbkey=kp.getPublic(); – PrivateKey prkey=kp.getPrivate();
3. RSA的加密与解密
• RSA公钥加密算法是1977年由罗纳德·李维斯特(Ron Rivest)、阿 迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一 起提出的。当时他们三人都在麻省理工学院工作。RSA就是他们三人 姓氏开头字母拼在一起组成的。
2.1 非对称密码生成思路
• (1)创建密匙工厂
– KeyPairGenerator kpg=KeyPairGenerator.getInstance("RSA"); KeyPairGenerator是一个生成工程,常用的加密方法有RSA和DSA
• (2)初始化密匙生成器
– kpg.initialize(1024); RSA可以在 512 到 2048 之间
– FileInputStream f=new FileInputStream(“key.dat”); – ObjectInputStream ob=new ObjectInputStream(f); – Key k=(Key)ob.readObject( );
• (2)生成初始向量
– byte [] rand = new bLeabharlann Baidute[8]; – Random r = new Random(); – r.nextBytes(rand); – IvParameterSpec iv = new IvParameterSpec(rand); – //指定rand 为初始化向量
• 所有加密都是8个一组进行加密的。
• 1976年,IBM发明了密码分组链接(CBC,Cipher-block chaining)模式。在CBC模式中,每个平文块先与前一个 密文块进行异或后,再进行加密。因此,CBC模式需要先 生成初始向量,再设置加密方式。
1.1 CBC加密思路
• (1)获得钥匙(与以前相同)
作业1: 完成一次自己名字的CBC加密和解 密
提交文件名: 学号+名字+week8_1.rar
• 需要提交 • 1)代码 • 2)dat密匙文件 • 3)截图
2. 非对称钥匙的生成
• 对称加密需要使用同一个密匙,若 A 想让 B 向其秘密传 送信息,A 必须先将密钥提供给 B或者B 必须先将密钥提 供给 A 。如果在传递密钥过程中密钥被窃取,则 A 和 B 之间的通信就不再安全.
1.1 CBC加密思路
• (3)获取密码器
– Cipher cp = Cipher.getInstance("DESede/CBC/PKCS5padding"); – cp.init(Cipher.ENCRYPT_MODE, k, iv); – byte ptext[]=msg.getBytes("UTF8"); – byte ctext[]=cp.doFinal(ptext);
• (4)初始化密码器,并执行加密
– FileOutputStream f2=new FileOutputStream("SEncCBC.dat"); – f2.write(rand); – f2.write(ctext);
1.2 CBC解密思路
• (1). 读取加密信息
– FileInputStream f=new FileInputStream("SEncCBC.dat"); – byte rand []= new byte[8]; – f.read(rand); – int num =f.available(); – byte ctext[] = new byte[num]; – f.read(ctext);
• (3)解密
– IvParameterSpec iv = new IvParameterSpec(rand); – Cipher cp = Cipher.getInstance("DESede/CBC/PKCS5padding"); – cp.init(Cipher.DECRYPT_MODE,k, iv); – byte ptext[]=cp.doFinal(ctext); – System.out.println(new String(ptext,"UTF8"));
• 任务: • 1. CBC的加密与解密 • 2. 非对称钥匙的生成 • 3. RSA的加密与解密 • 4. 使用密钥协定的加密与解密
1. CBC的加密与解密
• Java里面默认的加密模式为ECB(Electronic Code Book) 对明文进行单独的加密处理。
RSA的公钥、私钥的组成,以及加密、解密的公式可见于下表:
• RSA是目前最有影响力的公钥加密算法,它能够抵抗到目前为止已知 的绝大多数密码攻击,已被ISO推荐为公钥数据加密标准。
• 在公开密钥密码体制中,加密密钥(即公开密钥)PK是公开信息, 而解密密钥(即秘密密钥)SK是需要保密的。加密算法E和解密算法 D也都是公开的。虽然解密密钥SK是由公开密钥PK决定的,但却不 能根据PK计算出SK。
• (2).读取钥匙
– FileInputStream f1=new FileInputStream("key.dat"); – ObjectInputStream ob=new ObjectInputStream(f1); – Key k=(Key)ob.readObject( );
1.2 CBC解密思路
• 与对称加密算法不同,非对称加密算法需要两个密钥:公 开密钥(publickey)和私有密钥(privatekey)。公开密 钥与私有密钥是一对,如果用公开密钥对数据进行加密, 只有用对应的私有密钥才能解密;如果用私有密钥对数据 进行加密,那么只有用对应的公开密钥才能解密。因为加 密和解密使用的是两个不同的密钥,所以这种算法叫作非 对称加密算法。
• (3)生成密匙对,并获得公匙和私匙
– KeyPair kp=kpg.genKeyPair(); – PublicKey pbkey=kp.getPublic(); – PrivateKey prkey=kp.getPrivate();
3. RSA的加密与解密
• RSA公钥加密算法是1977年由罗纳德·李维斯特(Ron Rivest)、阿 迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一 起提出的。当时他们三人都在麻省理工学院工作。RSA就是他们三人 姓氏开头字母拼在一起组成的。
2.1 非对称密码生成思路
• (1)创建密匙工厂
– KeyPairGenerator kpg=KeyPairGenerator.getInstance("RSA"); KeyPairGenerator是一个生成工程,常用的加密方法有RSA和DSA
• (2)初始化密匙生成器
– kpg.initialize(1024); RSA可以在 512 到 2048 之间
– FileInputStream f=new FileInputStream(“key.dat”); – ObjectInputStream ob=new ObjectInputStream(f); – Key k=(Key)ob.readObject( );
• (2)生成初始向量
– byte [] rand = new bLeabharlann Baidute[8]; – Random r = new Random(); – r.nextBytes(rand); – IvParameterSpec iv = new IvParameterSpec(rand); – //指定rand 为初始化向量
• 所有加密都是8个一组进行加密的。
• 1976年,IBM发明了密码分组链接(CBC,Cipher-block chaining)模式。在CBC模式中,每个平文块先与前一个 密文块进行异或后,再进行加密。因此,CBC模式需要先 生成初始向量,再设置加密方式。
1.1 CBC加密思路
• (1)获得钥匙(与以前相同)
作业1: 完成一次自己名字的CBC加密和解 密
提交文件名: 学号+名字+week8_1.rar
• 需要提交 • 1)代码 • 2)dat密匙文件 • 3)截图
2. 非对称钥匙的生成
• 对称加密需要使用同一个密匙,若 A 想让 B 向其秘密传 送信息,A 必须先将密钥提供给 B或者B 必须先将密钥提 供给 A 。如果在传递密钥过程中密钥被窃取,则 A 和 B 之间的通信就不再安全.
1.1 CBC加密思路
• (3)获取密码器
– Cipher cp = Cipher.getInstance("DESede/CBC/PKCS5padding"); – cp.init(Cipher.ENCRYPT_MODE, k, iv); – byte ptext[]=msg.getBytes("UTF8"); – byte ctext[]=cp.doFinal(ptext);
• (4)初始化密码器,并执行加密
– FileOutputStream f2=new FileOutputStream("SEncCBC.dat"); – f2.write(rand); – f2.write(ctext);
1.2 CBC解密思路
• (1). 读取加密信息
– FileInputStream f=new FileInputStream("SEncCBC.dat"); – byte rand []= new byte[8]; – f.read(rand); – int num =f.available(); – byte ctext[] = new byte[num]; – f.read(ctext);
• (3)解密
– IvParameterSpec iv = new IvParameterSpec(rand); – Cipher cp = Cipher.getInstance("DESede/CBC/PKCS5padding"); – cp.init(Cipher.DECRYPT_MODE,k, iv); – byte ptext[]=cp.doFinal(ctext); – System.out.println(new String(ptext,"UTF8"));