python 做网站合适吗,莱芜金点子信息港二手市场,网站建设结构图下载,如何注册域名1)消息摘要#xff1a;这是一种与消息认证码结合使用以确保消息完整性的技术。 主要使用单向散列函数算法#xff0c;可用于检验消息的完整性#xff0c;和通过散列密码直接以文本形式保存等#xff0c;目前广泛使用的算法有MD4、MD5、SHA- 1#xff0c;jdk1.5对上面都提供…1)消息摘要这是一种与消息认证码结合使用以确保消息完整性的技术。 主要使用单向散列函数算法可用于检验消息的完整性和通过散列密码直接以文本形式保存等目前广泛使用的算法有MD4、MD5、SHA- 1jdk1.5对上面都提供了支持在java中进行消息摘要很简单 java.security.MessageDigest提供了一个简易的操作方法package com.number.test;import java.io.UnsupportedEncodingException;import java.security.MessageDigest;import java.security.NoSuchAlgorithmException;public class MessageDigestExample {/*** param args* 单一的消息摘要算法不使用密码.可以用来对明文消息(如密码)隐藏保存*/public static void main(String[] args) {if (args.length!1) {System.err.println(Usage:java.MessageDigestExample.text);System.exit(1);}try {byte[] plainTextargs[0].getBytes(UTF8);//使用getInstance(算法)来获得消息摘要,这里使用SHA-1的160位算法MessageDigest messageDigest MessageDigest.getInstance(SHA-1);System.out.println(\nmessageDigest.getProvider().getInfo());//开始使用算法messageDigest.update(plainText);System.out.println(\nDigest);//输出运算结果System.out.println(new String(messageDigest.digest(),utf-8));} catch (UnsupportedEncodingException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (NoSuchAlgorithmException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}2)私钥加密消息摘要只能检查消息的完整性但是单向的对明文消息并不能加密要加密明文的消息的话就要使用其他的算法要确保机密性我们需要使用私钥密码术来交换私有消息。这种最好理解使用对称算法。比如A用一个密钥对一个文件加密而B读取这个文件的话则需要和A一样的密钥双方共享一个私钥(而在web环境下私钥在传递时容易被侦听)使用私钥加密的话首先需要一个密钥可用javax.crypto.KeyGenerator产生一个密钥(java.security.Key),然后传递给一个加密工具(javax.crypto.Cipher),该工具再使用相应的算法来进行加密主要对称算法有DES(实际密钥只用到56位)AES(支持三种密钥长度128、192、256位)通常首先128位其他的还有DESede等jdk1.5种也提供了对对称算法的支持以下例子使用AES算法来加密package com.number.test;import java.io.UnsupportedEncodingException;import java.security.InvalidKeyException;import java.security.Key;import java.security.NoSuchAlgorithmException;import javax.crypto.BadPaddingException;import javax.crypto.Cipher;import javax.crypto.IllegalBlockSizeException;import javax.crypto.KeyGenerator;import javax.crypto.NoSuchPaddingException;public class PrivateExample {/*** param args**/public static void main(String[] args) {if (args.length!1) {System.err.println(Usage:java.PrivateExample.txt);System.exit(1);}try {byte [] plainTextargs[0].getBytes(utf8);//通过KeyGenerator形成一个keySystem.out.println(\nStart generate AES key);KeyGenerator keyGeneratorKeyGenerator.getInstance(AES);keyGenerator.init(128);Key key keyGenerator.generateKey();System.out.println(Finish generating AES key);//获得一个私钥加密类CipherECB是加密方式PKCS5Padding是填充方法Cipher cipherCipher.getInstance(AES/ECB/PKCS5Padding);System.out.println(\ncipher.getProvider().getInfo());//使用私钥加密System.out.println(\n Start 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[] newPlainTextcipher.doFinal(cipherText);System.out.println(Finish decryption:);System.out.println(new String(newPlainText,UTF8));} catch (UnsupportedEncodingException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (NoSuchAlgorithmException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (NoSuchPaddingException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (InvalidKeyException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IllegalBlockSizeException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (BadPaddingException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}3)公钥加密上面提到私钥加密需要一个共享的密钥那么如何传递密钥呢web环境下直接传递的话很容易被侦听到幸好有了公钥加密的出现。公钥加密也叫不对称加密不对称算法使用一对密钥对一个公钥一个私钥使用公钥加密的数据只有私钥能解开(可用于加密)同时使用私钥加密的数据只有公钥能解开(签名)。但是速度很慢(比私钥加密慢100到1000倍)公钥的主要算法有RSA还包括Blowfish,Diffie-Helman等jdk1.5种提供了对RSA的支持是一个改进的地方package com.number.test;import java.io.UnsupportedEncodingException;import java.security.InvalidKeyException;import java.security.KeyPair;import java.security.KeyPairGenerator;import java.security.NoSuchAlgorithmException;import javax.crypto.BadPaddingException;import javax.crypto.Cipher;import javax.crypto.IllegalBlockSizeException;import javax.crypto.NoSuchPaddingException;public class PublicExample {/*** param args*/public static void main(String[] args) {if (args.length!1) {System.err.println(Usage:java.PublicExaple.txt);System.exit(1);}try {byte[] plainTextargs[0].getBytes(UTF8);//构成一个RSA密钥System.out.println(Start generationg RSA key);KeyPairGenerator keyPairGenerator KeyPairGenerator.getInstance(RSA);keyPairGenerator.initialize(1024);KeyPair key keyPairGenerator.generateKeyPair();System.out.println(Finish generation RSA key);//获得一个RSA的Cipher类使用公钥加密Cipher cipher Cipher.getInstance(RSA/ECB/PKCS1Padding);System.out.println(\ncipher.getProvider().getInfo());System.out.println(\n Start encryption);cipher.init(Cipher.ENCRYPT_MODE,key.getPublic());byte[] cipherTextcipher.doFinal(plainText);System.out.println(\n Finish encryption);System.out.println(new String(cipherText,UTF8));//使用私钥解密System.out.println(\n 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));} catch (UnsupportedEncodingException e) {e.printStackTrace();} catch (NoSuchAlgorithmException e) {e.printStackTrace();} catch (NoSuchPaddingException e) {e.printStackTrace();} catch (InvalidKeyException e) {e.printStackTrace();} catch (IllegalBlockSizeException e) {e.printStackTrace();} catch (BadPaddingException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}