织梦CMS - 轻松建站从此开始!

手机配件网

当前位置: 主页 > 资讯世界 >

程序员有关加密的 教程!值得了解!

时间:2019-07-07 09:30来源:未知 作者:admin 点击:
说到程序员,我们也就会联想到java培训学校,在市面上也是有大部分的 程序员都是从java培训学校中走出来的 !而他们所了解的 有关这些方面的 东西也是差不多,经过的 统计,把java有关加密的 知识整合了一下,主要的 方法如下(1)消息摘要消息摘要(Message
说到程序员,我们也就会联想到java培训学校,在市面上也是有大部分的 程序员都是从java培训学校中走出来的 !而他们所了解的 有关这些方面的 东西也是差不多,经过的 统计,把java有关加密的 知识整合了一下,主要的 方法如下 (1)消息摘要 消息摘要(Message Digest)又称为数字摘要(Digital Digest)。它是一个唯一对应一个消息或文本的 固定长度的 值,广州电脑培训Java是一个广泛使用的网络编程语言,它是一种新的计算概念。首先,作为一种程序设计语言,它简单、面向对象、不依赖于机器的结构、具有可移植性、鲁棒性、安全性、并且提供了并发的机制、具有很高的性能。其次,它最大限度地利用了网络,Java的小应用程序(applet)可在网络上传输而不受CPU和环境的限制。另外,Java还提供了丰富的类库,使程序设计者可以很方便地建立自己的系统。,它由一个单向Hash加密函数对消息进行作用而产生。如果消息在途中改变了,则接收者通过对收到消息的 新产生的 摘要与原摘要比较,就可知道消息是否被改变了。因此消息摘要保证了消息的 完整性。       消息摘要采用单向Hash 函数将需加密的 明文"摘要"成一串128bit的 密文,这一串密文亦称为数字指纹(Finger Print),它有固定的 长度,且不同的 明文摘要成密文,其结果总是不同的 ,而同样的 明文其摘要必定一致。这样这串摘要便可成为验证明文是否是"真身"的 "指纹"了。
  这是一种与消息认证码结合使用以确保消息完整性的 技术。主要使用单向散列函数算法,可用于检验消息的 完整性,和通过散列密码直接以文本形式保存等,目前广泛使用的 算法有MD4、MD5、SHA-1,在java中进行消息摘要很简单:下面举一个简单的 例子/***MessageDigestTest.java*/import java.security.MessageDigest;/***单一的 消息摘要算法,不使用密码.可以用来对明文消息(如密码)隐藏保存*/public class MessageDigestTest{ public static void main(String[] args) throws Exception{   String str="123";  byte[] plainText=str.getBytes("UTF8");   //使用getInstance("算法")来获得消息摘要,这里使用SHA-1的 160位算法  MessageDigest messageDigest=MessageDigest.getInstance("SHA-1");   System.out.println("/n"+messageDigest.getProvider().getInfo());  //开始使用算法  messageDigest.update(plainText);  System.out.println("/nDigest:");  //输出算法运算结果  System.out.println(new String(messageDigest.digest(),"UTF8")); }} 复制代码 (还可以通过消息认证码来进行加密实现,javax.crypto.Mac提供了一个解决方案,有兴趣者可以参考相关API文档,本文只是简单介绍什么是摘要算法。) (2)私公钥和私钥
 公钥和私钥就是俗称的 不对称加密方式,是从以前的 对称加密(使用用户名与密码)方式的 提高。用电子邮件的 方式说明一下原理。   使用公钥与私钥的 目的 就是实现安全的 电子邮件,必须实现如下目的   1.我发送给你的 内容必须加密,在邮件的 传输过程中不能被别人看到。  2.必须保证是我发送的 邮件,不是别人冒充我的 。  要达到这样的 目标必须发送邮件的 两人都有公钥和私钥。  公钥,就是给大家用的 ,你可以通过电子邮件发布,可以通过网站让别人下载,公钥其实是用来加密/验章用的 。私钥,就是自己的 ,必须非常小心保存,最好加上密码,私钥是用来解密/签章,首先就Key的 所有权来说,私钥只有个人拥有。公钥与私钥的 作用是用公钥加密的 内容只能用私钥解密,用私钥加密的 内容只能用公钥解密。   比如说,我要给你发送一个加密的 邮件。首先,我必须拥有你的 公钥,你也必须拥有我的 公钥。  首先,我用你的 公钥给这个邮件加密,这样就保证这个邮件不被别人看到,而且保证这个邮件在传送过程中没有被修改。你收到邮件后,用你的 私钥就可以解密,就能看到内容。   其次我用我的 私钥给这个邮件加密,发送到你手里后,你可以用我的 公钥解密。因为私钥只有我手里有,这样就保证了这个邮件是我发送的 。   当A->B资料时,A会使用B的 公钥加密,这样才能确保只有B能解开,否则普罗大众都能解开加密的 讯息,就是去了资料的 保密性。验证方面则是使用签验章的 机制,A传资料给大家时,会以自己的 私钥做签章,如此所有收到讯息的 人都可以用A的 公钥进行验章,便可确认讯息是由A发出来的 了。 I.私匙加密解密实例/***PrivateTest.java*/import javax.crypto.Cipher;import javax.crypto.KeyGenerator;import java.security.Key; /***私鈅加密,保证消息机密性*/public class PrivateTest{ public static void main(String[] args) throws Exception{       String str="123";   byte[] plainText=str.getBytes("UTF8");      //通过KeyGenerator形成一个key  System.out.println("/nStart generate AES key");  KeyGenerator keyGen=KeyGenerator.getInstance("AES");  keyGen.init(128);  Key key=keyGen.generateKey();  System.out.println("Finish generating DES key");   //获得一个私鈅加密类Cipher,ECB是加密方式,PKCS5Padding是填充方法  Cipher cipher=Cipher.getInstance("AES/ECB/PKCS5Padding");  System.out.println("/n"+cipher.getProvider().getInfo());   //使用私鈅加密  System.out.println("/nStart encryption:");  cipher.init(Cipher.ENCRYPT_MODE,key);  byte[] cipherText=cipher.doFinal(plainText);  System.out.println("Finish encryption:");  System.out.println(new String(cipherText,"UTF8"));
   //使用私鈅解密   System.out.println("/nStart decryption:");  cipher.init(Cipher.DECRYPT_MODE,key);  byte[] newPlainText=cipher.doFinal(cipherText);  System.out.println("Finish decryption:");   System.out.println(new String(newPlainText,"UTF8"));  }}
II.公匙加密,私匙解密实例 /***PublicTest.java*/import java.security.Key;import javax.crypto.Cipher;import java.security.KeyPairGenerator;import java.security.KeyPair;/***一个简单的 公鈅加密例子,Cipher类使用KeyPairGenerator生成的 公鈅和私鈅*/public class PublicTest{ public static void main(String[] args) throws Exception{     String str="123";   byte[] plainText=str.getBytes("UTF8");  //构成一个RSA密钥  System.out.println("/nStart generating RSA key");  KeyPairGenerator keyGen=KeyPairGenerator.getInstance("RSA");  keyGen.initialize(1024);  KeyPair key=keyGen.generateKeyPair();  System.out.println("Finish generating RSA key");   //获得一个RSA的 Cipher类,使用公鈅加密  Cipher cipher=Cipher.getInstance("RSA/ECB/PKCS1Padding");  System.out.println("/n"+cipher.getProvider().getInfo());   System.out.println("/nStart encryption");  cipher.init(Cipher.ENCRYPT_MODE,key.getPublic());  byte[] cipherText=cipher.doFinal(plainText);  System.out.println("Finish encryption:");  System.out.println(new String(cipherText,"UTF8"));   //使用私鈅解密  System.out.println("/nStart decryption");  cipher.init(Cipher.DECRYPT_MODE,key.getPrivate());  byte[] newPlainText=cipher.doFinal(cipherText);  System.out.println("Finish decryption:");  System.out.println(new String(newPlainText,"UTF8")); }}复制代码 以上就是对于java培训学校出来的 程序员对于java加密的 一些知识的 讲解,希望对java培训有兴趣的 学者们有所帮助!最后祝你们在java培训学校里能学更多的 知识哦!!! (责任编辑:admin)
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
验证码: 点击我更换图片
栏目列表
推荐内容