Security in Java Implements

简介:
One: Message Digest
 
At first , I show you the code like:
/** 
*    
*/
 
package MyMessageDigest; 

import java.security.MessageDigest; 
import java.security.NoSuchAlgorithmException; 

/** 
* @author daniel 
* 演示消息摘要的Java实现,其原理是通过比对摘要信息来判断原始传输信息没有被修改。 
* 即对一个任意长度的一个数据块进行计算,产生一个唯一指印(对于SHA1是产生一个20字节的二进制数组)。 
*/
 
public  class MessageDigestDemo { 

   /** 
    * @param args 
    */
 
   public  static  void main(String[] args) { 
    MessageDigestDemo my= new MessageDigestDemo(); 
         my.testDigest(); 

  } 
    
   public  void testDigest() 
     { 
         try { 
            String myinfo= "Daniel的测试信息"
          //MessageDigest alg=MessageDigest.getInstance("MD5"); 
             MessageDigest alga=MessageDigest.getInstance( "SHA-1"); 
             alga.update(myinfo.getBytes()); 
              byte[] digesta=alga.digest(); 
             System.out.println( "本信息摘要是:"+byte2hex(digesta)); 
              //通过某中方式传给其他人你的信息(myinfo)和摘要(digesta) 对方可以判断是否更改或传输正常 
             MessageDigest algb=MessageDigest.getInstance( "SHA-1"); 
             algb.update(myinfo.getBytes()); 
              if (algb.isEqual(digesta,algb.digest())) { 
                    System.out.println( "信息检查正常"); 
                } 
                 else 
                 { 
                     System.out.println( "摘要不相同"); 
                    } 
        } 
         catch (NoSuchAlgorithmException ex) { 
            System.out.println( "非法摘要算法"); 
        } 
     } 
      public String byte2hex( byte[] b)  //二行制转字符串 
         { 
            String hs=""; 
            String stmp=""; 
             for ( int n=0;n<b.length;n++) 
             { 
                stmp=(Integer.toHexString(b[n] & 0XFF)); 
                 if (stmp.length()==1) hs=hs+ "0"+stmp; 
                 else hs=hs+stmp; 
                 if (n<b.length-1)    hs=hs+ ":"
             } 
             return hs.toUpperCase(); 
         } 
/** 
* 相关资料: 
* 一个消息摘要就是一个数据块的数字指纹。即对一个任意长度的一个数据块进行计算,产生一个唯一指印 
* (对于SHA1是产生一个20字节的二进制数组)。 
* 消息摘要有两个基本属性: 
* 两个不同的报文难以生成相同的摘要    
* 以对指定的摘要生成一个报文,而由该报文反推算出该指定的摘要    
* 代表:美国国家标准技术研究所的SHA1和麻省理工学院Ronald Rivest提出的MD5    
*/
 


 
Then, follow me, I will say at api using view,  the main steps to implement this simple message digest are:
1.Set the encryption algorithm of MessageDigest class, like "SHA-1","MD5" etc.
2.Add the message for digest.
3.Send this messagedigest to others pepole
4.In his side, he can check in same way like you digest, if they are same, is to say message not be modified by somebody.
 
Two: Digital Signature
Show code:
/** 
*    
*/
 
package MyDSA; 

import java.io.FileInputStream; 
import java.io.FileNotFoundException; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.io.ObjectInputStream; 
import java.io.ObjectOutputStream; 
import java.security.KeyPair; 
import java.security.KeyPairGenerator; 
import java.security.NoSuchAlgorithmException; 
import java.security.PrivateKey; 
import java.security.PublicKey; 
import java.security.SecureRandom; 
import java.security.Signature; 

/** 
* @author daniel    
* 演示数字签名    
*        1.首先要生成一个用户甲某的密钥对,并且分别保存    
*        2.取出私钥进行数字签名并写入文件系统 
*                    3.把甲某的公钥信息及签名发给其它用户    
*                    4.乙某接受到甲某的信息及公钥后,进行验证操作 
*/
 
public  class MyDSA { 

   /** 
    * @param args 
    */
 
   public  static  void main(String[] args) { 
    MyDSA demo =  new MyDSA(); 
     // 1.首先要生成一个用户甲某的密钥对,并且分别保存 
    demo.CreateKeyPairs(); 
     // 2.取出私钥进行数字签名并写入文件系统 
    demo.SignAnUserMessageByPrikey(); 
     // 3.把甲某的公钥信息及签名发给其它用户 
     // 4.乙某接受到甲某的信息及公钥后,进行验证操作 
    demo.CheckMessageWhenOtherPersionReceviced(); 
  } 

   /** 
    * 4.乙某接受到甲某的信息及公钥后,进行验证操作 
    */
 
   public  void CheckMessageWhenOtherPersionReceviced() { 
     try { 
       // 4.1 取出公钥 
      ObjectInputStream in =  new ObjectInputStream( new FileInputStream( 
           "mypubkey.dat")); 
      PublicKey pubkey = (PublicKey) in.readObject(); 
      in.close(); 
       // 4.2读取签名和信息 
      in =  new ObjectInputStream( new FileInputStream( "myinfo.dat")); 
      String info = (String) in.readObject(); 
       byte[] signed = ( byte[]) in.readObject(); 
      in.close(); 
       // 4.3开始验证 
      Signature signetcheck = Signature.getInstance( "DSA"); 
      signetcheck.initVerify(pubkey); // 初始化此用于验证的对象。 
      signetcheck.update(info.getBytes());  // 使用指定的 byte 数组更新要签名或验证的数据。 
       // 4.4验证结果(验证传入的签名) 
       if (signetcheck.verify(signed)) { 
        System.out.println( "签名正常!"); 
      } 
    }  catch (Exception e) { 
       // TODO Auto-generated catch block 
      e.printStackTrace(); 
    } 

  } 

   /** 
    * 2.取出私钥进行数字签名并写入文件系统 
    */
 
   public  void SignAnUserMessageByPrikey() { 
    String myinfo =  "Daniel的测试信息"
     try { 
       // 2.1取出私钥 
      ObjectInputStream in =  new ObjectInputStream( new FileInputStream( 
           "myprikey.dat")); 
      PrivateKey myprikey = (PrivateKey) in.readObject(); 
      in.close(); 
       // 2.2对一个信息进行私钥签名 
      Signature signature = Signature.getInstance( "DSA"); 
      signature.initSign(myprikey); 
      signature.update(myinfo.getBytes()); 
       byte[] signed = signature.sign(); 
       // 2.3把信息和签名保存到文件myinfo.dat 
      ObjectOutputStream out =  new ObjectOutputStream( 
           new FileOutputStream( "myinfo.dat")); 
      out.writeObject(myinfo); 
      out.writeObject(signed); 
      out.close(); 
    }  catch (Exception e) { 
       // TODO Auto-generated catch block 
      e.printStackTrace(); 
    } 
  } 

   /** 
    * 1.生成密钥对,并且分别保存 
    */
 
   public  void CreateKeyPairs() { 
     try { 
       // 1.1采用DSA 算法 
      KeyPairGenerator keygen = KeyPairGenerator.getInstance( "DSA"); 
       // 1.2使用给定的随机源(和默认的参数集合)初始化确定密钥大小的密钥对生成器。 
      SecureRandom srand =  new SecureRandom(); 
       // 初始化随机产生器,设置种子 
      srand.setSeed( "randbean".getBytes()); 
       // 初始化密钥生成器 
      keygen.initialize(512, srand); 
       // 1.3生成密钥pubkey和prikey 
      KeyPair keys = keygen.generateKeyPair();  // 生产密钥租 
      PublicKey pubkey = keys.getPublic();  // 获取公钥 
      PrivateKey prikey = keys.getPrivate();  // 私钥 
       // 1.4保存该密钥对到文件系统 
       // 1.4.1 私钥 
      ObjectOutputStream out =  new ObjectOutputStream( 
           new FileOutputStream( "myprikey.dat")); 
      out.writeObject(prikey); 
      out.close(); 
       // 1.4.2 公钥 
      out =  new ObjectOutputStream( new FileOutputStream( "mypubkey.dat")); 
      out.writeObject(pubkey); 
      out.close(); 
    }  catch (NoSuchAlgorithmException e) { 
       // TODO Auto-generated catch block 
      e.printStackTrace(); 
    }  catch (FileNotFoundException e) { 
       // TODO Auto-generated catch block 
      e.printStackTrace(); 
    }  catch (IOException e) { 
       // TODO Auto-generated catch block 
      e.printStackTrace(); 
    } 
  } 

 

    本文转自danni505 51CTO博客,原文链接:http://blog.51cto.com/danni505/152694,如需转载请自行联系原作者




相关文章
|
14天前
|
安全 Java 数据安全/隐私保护
使用Spring Security进行Java身份验证与授权
【4月更文挑战第16天】Spring Security是Java应用的安全框架,提供认证和授权解决方案。通过添加相关依赖到`pom.xml`,然后配置`SecurityConfig`,如设置用户认证信息和URL访问规则,可以实现应用的安全保护。认证流程包括请求拦截、身份验证、响应生成和访问控制。授权则涉及访问决策管理器,如基于角色的投票。Spring Security为开发者构建安全应用提供了全面且灵活的工具,涵盖OAuth2、CSRF保护等功能。
|
27天前
|
存储 安全 Java
Spring Security应用讲解(Java案列演示)
Spring Security应用讲解(Java案列演示)
|
2月前
|
安全 Java 数据安全/隐私保护
【Java】保护你的应用:深入探讨Spring Security的应用与最佳实践
【Java】保护你的应用:深入探讨Spring Security的应用与最佳实践
77 0
|
5月前
|
人工智能 Java API
【Java 接口】接口(Interface)的定义,implements关键字,接口实现方法案例
【Java 接口】接口(Interface)的定义,implements关键字,接口实现方法案例
|
12月前
|
存储 安全 NoSQL
【java_wxid项目】【第七章】【Spring Cloud Security Oauth2集成】
主项目链接:https://gitee.com/java_wxid/java_wxid 项目架构及博文总结:
968 0
|
存储 安全 算法
Java:SpringBoot整合Spring Security实现认证与授权学习笔记
Java:SpringBoot整合Spring Security实现认证与授权学习笔记
502 0
Java:SpringBoot整合Spring Security实现认证与授权学习笔记
|
存储 SQL 安全
文字干货:Java认证授权框架Spring Security介绍
  Spring Security 是一个非常强大的身份验证和授权控制框架。为了满足企业项目的不同需求,它提供了很多定制化开发的解决方案,通过简单的调整配置,就能为我们的应用提供一套可靠的安全保障。   系统安全和系统保护设计   在实际开发过程中,为了保证我们的系统能够安全稳定地运行下去,一般都要从下面两点来考虑:   系统安全性:防止非法入侵、非法请求、非法拦截等。我们需要阻止和屏蔽不信任的请求源访问,保证数据的安全可靠,不被人窃取。   系统健壮性:也就是系统可用性,最常见的解决方案就是做服务 “冗余”。当然量级够大的话,要做的事情会很多很多,比如限流、熔断、降级等等。
151 0
|
安全 Java Spring
java版spring cloud 多租户社交电子商务平台-Spring Cloud Security
一、SpringCloud Security简介 Spring Cloud Security提供了一组原语,用于构建安全的应用程序和服务,而且操作简便。可以在外部(或集中)进行大量配置的声明性模型有助于实现大型协作的远程组件系统,通常具有中央身份管理服务。
2389 0
JAVA之旅(七)——final关键字 , 抽象类abstract,模板方法模式,接口interface,implements,特点,扩展
JAVA之旅(七)——final关键字 , 抽象类abstract,模板方法模式,接口interface,implements,特点,扩展 一.final 我们来聊聊final这个关键字 final可以修饰类,方法和变量 final修饰的类不可以被继承 final修饰的方法不可以被覆盖 fi.
1200 0
|
安全 Java Spring
spring security oauth2 jwt 认证和资源分离的配置文件(java类配置版)
最近再学习spring security oauth2。下载了官方的例子sparklr2和tonr2进行学习。但是例子里包含的东西太多,不知道最简单最主要的配置有哪些。所以决定自己尝试搭建简单版本的例子。
2849 0