当前位置: 首页 > news >正文

医院网站建设安全协议网站软文写作要求

医院网站建设安全协议,网站软文写作要求,一级a做爰片了网站,涂料网站设计公司当前位置:我的异常网 编程 java 加密解密容易实现java 加密解密容易实现www.myexceptions.net 网友分享于#xff1a;2013-10-27 浏览#xff1a;3次java 加密解密简单实现加密算法有很多种#xff1a;这里只大约列举几例#xff1a;1:消息摘要#xff1a;(数字指纹)2013-10-27  浏览3次java 加密解密简单实现加密算法有很多种这里只大约列举几例1:消息摘要(数字指纹)既对一个任意长度的一个数据块进行计算产生一个唯一指纹。MD5/SHA1发送给其他人你的信息和摘要,其他人用相同的加密方法得到摘要最后进行比较摘要是否相同。2:单匙密码体制:DES:比较简便高效,密钥简短加解密速度快破译极其困难,但其安全性依赖于密匙的安全性。DES(Data Encryption Standard)是发明最早的最广泛使用的分组对称加密算法。DES算法的入口参数有三个Key、Data、Mode。其中Key为8个字节共64位是DES算法的工作密钥Data也为8个字节64位是要被加密或被解密的数据Mode为DES的工作方式有两种加密或解密3:数字签名:就是信息发送者用其私钥对从所传报文中提取出的特征数据(或称数字指纹)进行RSA算法操作以保证发信人无法抵赖曾发过该信息(即不可抵赖性)同时也确保信息报文在经签名后末被篡改(即完整性)。当信息接收者收到报文后就可以用发送者的公钥对数字签名进行验证。代表DSA4:非对称密匙密码体制(公匙体系)加密密匙不同于解密密匙加密密匙公之于众谁都可以使用解密密匙只有解密人自己知道。代表RSA下面是对上面几个例子进行的简单实现Java代码package test;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import java.security.*;import javax.crypto.Cipher;import javax.crypto.KeyGenerator;import javax.crypto.SecretKey;/*** 加密解密** author shy.qiu* since  http://blog.csdn.net/qiushyfm*/public class CryptTest {/*** 进行MD5加密** param info*            要加密的信息* return String 加密后的字符串*/public String encryptToMD5(String info) {byte[] digesta null;try {// 得到一个md5的消息摘要MessageDigest alga MessageDigest.getInstance(MD5);// 添加要进行计算摘要的信息alga.update(info.getBytes());// 得到该摘要digesta alga.digest();} catch (NoSuchAlgorithmException e) {e.printStackTrace();}// 将摘要转为字符串String rs byte2hex(digesta);return rs;}/*** 进行SHA加密** param info*            要加密的信息* return String 加密后的字符串*/public String encryptToSHA(String info) {byte[] digesta null;try {// 得到一个SHA-1的消息摘要MessageDigest alga MessageDigest.getInstance(SHA-1);// 添加要进行计算摘要的信息alga.update(info.getBytes());// 得到该摘要digesta alga.digest();} catch (NoSuchAlgorithmException e) {e.printStackTrace();}// 将摘要转为字符串String rs byte2hex(digesta);return rs;}// ///*** 创建密匙** param algorithm*            加密算法,可用 DES,DESede,Blowfish* return SecretKey 秘密(对称)密钥*/public SecretKey createSecretKey(String algorithm) {// 声明KeyGenerator对象KeyGenerator keygen;// 声明 密钥对象SecretKey deskey null;try {// 返回生成指定算法的秘密密钥的 KeyGenerator 对象keygen KeyGenerator.getInstance(algorithm);// 生成一个密钥deskey keygen.generateKey();} catch (NoSuchAlgorithmException e) {e.printStackTrace();}// 返回密匙return deskey;}/*** 根据密匙进行DES加密** param key*            密匙* param info*            要加密的信息* return String 加密后的信息*/public String encryptToDES(SecretKey key, String info) {// 定义 加密算法,可用 DES,DESede,BlowfishString Algorithm DES;// 加密随机数生成器 (RNG),(可以不写)SecureRandom sr new SecureRandom();// 定义要生成的密文byte[] cipherByte null;try {// 得到加密/解密器Cipher c1 Cipher.getInstance(Algorithm);// 用指定的密钥和模式初始化Cipher对象// 参数:(ENCRYPT_MODE, DECRYPT_MODE, WRAP_MODE,UNWRAP_MODE)c1.init(Cipher.ENCRYPT_MODE, key, sr);// 对要加密的内容进行编码处理,cipherByte c1.doFinal(info.getBytes());} catch (Exception e) {e.printStackTrace();}// 返回密文的十六进制形式return byte2hex(cipherByte);}/*** 根据密匙进行DES解密** param key*            密匙* param sInfo*            要解密的密文* return String 返回解密后信息*/public String decryptByDES(SecretKey key, String sInfo) {// 定义 加密算法,String Algorithm DES;// 加密随机数生成器 (RNG)SecureRandom sr new SecureRandom();byte[] cipherByte null;try {// 得到加密/解密器Cipher c1 Cipher.getInstance(Algorithm);// 用指定的密钥和模式初始化Cipher对象c1.init(Cipher.DECRYPT_MODE, key, sr);// 对要解密的内容进行编码处理cipherByte c1.doFinal(hex2byte(sInfo));} catch (Exception e) {e.printStackTrace();}// return byte2hex(cipherByte);return new String(cipherByte);}// //*** 创建密匙组并将公匙私匙放入到指定文件中** 默认放入mykeys.bat文件中*/public void createPairKey() {try {// 根据特定的算法一个密钥对生成器KeyPairGenerator keygen KeyPairGenerator.getInstance(DSA);// 加密随机数生成器 (RNG)SecureRandom random new SecureRandom();// 重新设置此随机对象的种子random.setSeed(1000);// 使用给定的随机源(和默认的参数集合)初始化确定密钥大小的密钥对生成器keygen.initialize(512, random);// keygen.initialize(512);// 生成密钥组KeyPair keys keygen.generateKeyPair();// 得到公匙PublicKey pubkey keys.getPublic();// 得到私匙PrivateKey prikey keys.getPrivate();// 将公匙私匙写入到文件当中doObjToFile(mykeys.bat, new Object[] { prikey, pubkey });} catch (NoSuchAlgorithmException e) {e.printStackTrace();}}/*** 利用私匙对信息进行签名 把签名后的信息放入到指定的文件中** param info*            要签名的信息* param signfile*            存入的文件*/public void signToInfo(String info, String signfile) {// 从文件当中读取私匙PrivateKey myprikey (PrivateKey) getObjFromFile(mykeys.bat, 1);// 从文件中读取公匙PublicKey mypubkey (PublicKey) getObjFromFile(mykeys.bat, 2);try {// Signature 对象可用来生成和验证数字签名Signature signet Signature.getInstance(DSA);// 初始化签署签名的私钥signet.initSign(myprikey);// 更新要由字节签名或验证的数据signet.update(info.getBytes());// 签署或验证所有更新字节的签名返回签名byte[] signed signet.sign();// 将数字签名,公匙,信息放入文件中doObjToFile(signfile, new Object[] { signed, mypubkey, info });} catch (Exception e) {e.printStackTrace();}}/*** 读取数字签名文件 根据公匙签名信息验证信息的合法性** return true 验证成功 false 验证失败*/public boolean validateSign(String signfile) {// 读取公匙PublicKey mypubkey (PublicKey) getObjFromFile(signfile, 2);// 读取签名byte[] signed (byte[]) getObjFromFile(signfile, 1);// 读取信息String info (String) getObjFromFile(signfile, 3);try {// 初始一个Signature对象,并用公钥和签名进行验证Signature signetcheck Signature.getInstance(DSA);// 初始化验证签名的公钥signetcheck.initVerify(mypubkey);// 使用指定的 byte 数组更新要签名或验证的数据signetcheck.update(info.getBytes());System.out.println(info);// 验证传入的签名return signetcheck.verify(signed);} catch (Exception e) {e.printStackTrace();return false;}}/*** 将二进制转化为16进制字符串** param b*            二进制字节数组* return String*/public String byte2hex(byte[] b) {String hs ;String stmp ;for (int n 0; n b.length; n) {stmp (java.lang.Integer.toHexString(b[n] 0XFF));if (stmp.length() 1) {hs hs 0 stmp;} else {hs hs stmp;}}return hs.toUpperCase();}/*** 十六进制字符串转化为2进制** param hex* return*/public byte[] hex2byte(String hex) {byte[] ret new byte[8];byte[] tmp hex.getBytes();for (int i 0; i 8; i) {ret[i] uniteBytes(tmp[i * 2], tmp[i * 2 1]);}return ret;}/*** 将两个ASCII字符合成一个字节 如EF-- 0xEF** param src0*            byte* param src1*            byte* return byte*/public static byte uniteBytes(byte src0, byte src1) {byte _b0 Byte.decode(0x new String(new byte[] { src0 })).byteValue();_b0 (byte) (_b0 4);byte _b1 Byte.decode(0x new String(new byte[] { src1 })).byteValue();byte ret (byte) (_b0 ^ _b1);return ret;}/*** 将指定的对象写入指定的文件** param file*            指定写入的文件* param objs*            要写入的对象*/public void doObjToFile(String file, Object[] objs) {ObjectOutputStream oos null;try {FileOutputStream fos new FileOutputStream(file);oos new ObjectOutputStream(fos);for (int i 0; i objs.length; i) {oos.writeObject(objs[i]);}} catch (Exception e) {e.printStackTrace();} finally {try {oos.close();} catch (IOException e) {e.printStackTrace();}}}/*** 返回在文件中指定位置的对象** param file*            指定的文件* param i*            从1开始* return*/public Object getObjFromFile(String file, int i) {ObjectInputStream ois null;Object obj null;try {FileInputStream fis new FileInputStream(file);ois new ObjectInputStream(fis);for (int j 0; j i; j) {obj ois.readObject();}} catch (Exception e) {e.printStackTrace();} finally {try {ois.close();} catch (IOException e) {e.printStackTrace();}}return obj;}/*** 测试** param args*/public static void main(String[] args) {CryptTest jiami new CryptTest();// 执行MD5加密Hello world!System.out.println(Hello经过MD5: jiami.encryptToMD5(Hello));// 生成一个DES算法的密匙SecretKey key jiami.createSecretKey(DES);// 用密匙加密信息Hello world!String str1 jiami.encryptToDES(key, Hello);System.out.println(使用des加密信息Hello为: str1);// 使用这个密匙解密String str2 jiami.decryptByDES(key, str1);System.out.println(解密后为 str2);// 创建公匙和私匙jiami.createPairKey();// 对Hello world!使用私匙进行签名jiami.signToInfo(Hello, mysign.bat);// 利用公匙对签名进行验证。if (jiami.validateSign(mysign.bat)) {System.out.println(Success!);} else {System.out.println(Fail!);}}}用到的重要的类javax.crypto.KeyGeneratorpublic final SecretKey generateKey()生成一个密钥public static final KeyGenerator getInstance(String algorithm) 返回生成指定算法的秘密密钥的KeyGenerator对象。javax.crypto 接口 SecretKeyjavax.crypto.Cipher 此类为加密和解密提供密码功能。它构成了 Java Cryptographic Extension (JCE) 框架的核心public final void init(int opmode,Key key)public final byte[] doFinal(byte[] input) 按单部分操作加密或解密数据或者结束一个多部分操作java.security.KeyPairGeneratorstatic KeyPairGenerator getInstance(String algorithm)回生成指定算法的 public/private 密钥对的 KeyPairGenerator 对象。java.security.Signature使用 Signature 对象签名数据或验证签名包括以下三个阶段1初始化使用初始化验证签名的公钥(请参见 initVerify)或使用初始化签署签名的私钥(也可以选择“安全随机数生成器”)initSign(PrivateKey)和initSign(PrivateKey, SecureRandom))。2更新根据初始化类型这可更新要签名或验证的字节。请参见 update 方法。3签署或验证所有更新字节的签名。请参见 sign 方法和 verify 方法。[colordarkblue][/color]文章评论
http://www.zqtcl.cn/news/21194/

相关文章:

  • 文山网站建设兼职做微信头图的网站
  • 果园网站建设门户型网站开发难度
  • 沧州网站建设代理价格网站建设首选九零后网络
  • 湖南关于新冠最新通知提供邢台网站优化
  • 自己做的网站怎么发布win7除了红动中国还有哪些设计网站
  • 网站地图咋做wordpress 私信插件
  • 网站模板开发主要作用建立网站对吗
  • 营销网站文章去那找信阳网络推广公司
  • 做房产网站需要注意什么怎样自己制作app软件卖货
  • 广告设计网站都有哪些wordpress微信按钮弹框
  • 唐山百度搜索排名优化网站建设公司推荐乐云seo
  • 软件园专业做网站网站的标签修改
  • 做网站的公司有多少家网站新开怎么做营销
  • 白种女人做爰网站权威的建筑工程网站
  • 上海网站建设价格网页版梦幻西游辅助工具
  • 网站的优化承诺郑州网站设计收费
  • 网站建设中 优秀账户的标准做自动发货网站
  • 免费做网站百度能录入网站统计工具是什么意思
  • 北京市通信管理局 网站备案wordpress4.4.1下载
  • 黄岛做网站找哪家好企业做网站的注意什么问题
  • 在什么地方可以接到做网站的活海口网站建设公司排名
  • 工业设计网站哪个最揭阳网页制作
  • 长沙协会网站设计专业服务建立一个自己的网页
  • 滨江区高端网站建设首码项目网
  • php 网站响应时间wordpress 改为中文字体
  • 太原网站推广排名怎么学做电商然后自己创业
  • 江苏中南建设集团网站是多少钱微信公众号小程序是什么
  • 做外贸做几个网站合适怎样做软件网站
  • 合作在惠州做网站wordpress是国外服务器吗
  • 网站两侧对联广告图片建设工程合同无效工程价款的结算