Java加密和数字签名 1消息摘要

Python012

Java加密和数字签名 1消息摘要,第1张

本文主要谈一下密码学中的加密和数字签名 以及其在java中如何进行使用 对密码学有兴趣的伙伴 推荐看Bruce Schneier的著作 Applied Crypotography 在jdk 的发行版本中安全性方面有了很大的改进 也提供了对RSA算法的直接支持 现在我们从实例入手解决问题(本文仅是作为简单介绍)

一 密码学上常用的概念

消息摘要

这是一种与消息认证码结合使用以确保消息完整性的技术 主要使用单向散列函数算法 可用于检验消息的完整性 和通过散列密码直接以文本形式保存等 目前广泛使用的算法有MD MD SHA jdk 对上面都提供了支持 在java中进行消息摘要很简单 java security MessageDigest提供了一个简易的操作方法

Java代码

/***MessageDigestExample java*Copyright */import java security MessageDigest/***单一的消息摘要算法 不使用密码 可以用来对明文消息(如 密码)隐藏保存*/public class MessageDigestExample{ public static void main(String[] args) throws Exception{if(args length!= ){ System err println( Usage:java MessageDigestExample text ) System exit( )}byte[] plainText=args[ ] getBytes( UTF )//使用getInstance( 算法 )来获得消息摘要 这里使用SHA 的 位算法MessageDigest messageDigest=MessageDigest getInstance( SHA )System out println( +messageDigest getProvider() getInfo())//开始使用算法messageDigest update(plainText)System out println( Digest: )//输出算法运算结果System out println(new String(messageDigest digest() UTF )) }}

lishixinzhi/Article/program/Java/gj/201311/27287

import java.util.Scanner

public class Encpryt {

public Encpryt() {

Scanner scan = new Scanner(System.in)

System.out.println("输入一个四位数:")

String str = scan.next()

while(str != "q"){

if (str.length()!=4) {

System.out.println("您输入的不是4位的数字请重新输入")

str = scan.next()

continue

}

System.out.println("加密后的数是:")

char[] ns = new char[4]

for(int i = 0i <4i++){

ns[i] = str.charAt(i)

System.out.println(ns[i] -'0' + 'a' - 1)

}

System.out.println("输入一个四位数:")

str = scan.next()

}

}

/** * @param args

*/

public static void main(String[] args) {

new Encpryt()

}

}

现在很多加密算法的 比如你可以使用XXTea加密。前端使用post请求,请求之前将你要传的参数 组合成一个json格式,之后进行XXTea加密,加密完之后 将加密得到的字符串放到post 请求数据中。后台加一个拦截器,拿到你的请求地址以及加密字符串,然后将字符串解密 得到一个map,再通过request得到的ParamRequestWrapper 将解密后的参数放回去,这样你的方法就可以照常拿到数据了。