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,如需转载请自行联系原作者




相关文章
|
5月前
|
安全 Java 数据安全/隐私保护
使用Java和Spring Security实现身份验证与授权
使用Java和Spring Security实现身份验证与授权
|
6月前
|
存储 安全 Java
详解 Spring Security:全面保护 Java 应用程序的安全框架
详解 Spring Security:全面保护 Java 应用程序的安全框架
421 1
|
6月前
|
JSON 安全 Java
Java一分钟之-Spring Security:身份验证与授权
【6月更文挑战第7天】本文介绍了Spring Security的常见问题及解决方案,包括配置启动、身份验证、授权、无状态JWT和异常处理。通过`@EnableWebSecurity`启动安全框架,自定义登录页面和登录逻辑,使用`http.authorizeRequests()`设置访问规则。对于JWT,需添加解析器并注册过滤器。此外,处理Spring Security异常,创建自定义的`AccessDeniedHandler`和`AuthenticationEntryPoint`。理解核心概念并按业务需求定制,是确保应用安全的关键。
124 1
|
7月前
|
安全 Java 数据安全/隐私保护
使用Spring Security进行Java身份验证与授权
【4月更文挑战第16天】Spring Security是Java应用的安全框架,提供认证和授权解决方案。通过添加相关依赖到`pom.xml`,然后配置`SecurityConfig`,如设置用户认证信息和URL访问规则,可以实现应用的安全保护。认证流程包括请求拦截、身份验证、响应生成和访问控制。授权则涉及访问决策管理器,如基于角色的投票。Spring Security为开发者构建安全应用提供了全面且灵活的工具,涵盖OAuth2、CSRF保护等功能。
160 4
|
7月前
|
存储 安全 Java
Spring Security应用讲解(Java案列演示)
Spring Security应用讲解(Java案列演示)
|
7月前
|
安全 Java 数据安全/隐私保护
【Java】保护你的应用:深入探讨Spring Security的应用与最佳实践
【Java】保护你的应用:深入探讨Spring Security的应用与最佳实践
184 0
|
7月前
|
人工智能 Java API
【Java 接口】接口(Interface)的定义,implements关键字,接口实现方法案例
【Java 接口】接口(Interface)的定义,implements关键字,接口实现方法案例
113 0
|
存储 安全 算法
Java:SpringBoot整合Spring Security实现认证与授权学习笔记
Java:SpringBoot整合Spring Security实现认证与授权学习笔记
644 0
Java:SpringBoot整合Spring Security实现认证与授权学习笔记
|
存储 安全 NoSQL
【java_wxid项目】【第七章】【Spring Cloud Security Oauth2集成】
主项目链接:https://gitee.com/java_wxid/java_wxid 项目架构及博文总结:
1175 0
|
存储 SQL 安全
文字干货:Java认证授权框架Spring Security介绍
  Spring Security 是一个非常强大的身份验证和授权控制框架。为了满足企业项目的不同需求,它提供了很多定制化开发的解决方案,通过简单的调整配置,就能为我们的应用提供一套可靠的安全保障。   系统安全和系统保护设计   在实际开发过程中,为了保证我们的系统能够安全稳定地运行下去,一般都要从下面两点来考虑:   系统安全性:防止非法入侵、非法请求、非法拦截等。我们需要阻止和屏蔽不信任的请求源访问,保证数据的安全可靠,不被人窃取。   系统健壮性:也就是系统可用性,最常见的解决方案就是做服务 “冗余”。当然量级够大的话,要做的事情会很多很多,比如限流、熔断、降级等等。
189 0