消息摘要算法在Java Web系统中的应用

合集下载

基于MD5的加盐消息摘要Java实现

基于MD5的加盐消息摘要Java实现

基于MD5的加盐消息摘要Java实现作者:赵一凡卞良丛昕来源:《软件导刊》2018年第03期摘要:Java是一种面向对象的编程语言,具有良好的跨平台性,其继承、封装、多态的特征能够使程序更加稳定。

通过对摘要破解网站的测试,发现短语言实现明文摘要加密,安全性并不高,而加盐消息摘要有助于提高加密安全性。

加盐消息摘要保留了MD5算法的优点,通过增加原始明文长度,可解决短明文摘要加密不安全的问题。

测试结果表明,加盐消息摘要的安全性较高,加盐后的消息摘要不易被破解网站反查询破解。

关键词:消息摘要;加盐法;MD5;加密DOIDOI:10.11907/rjdk.172368中图分类号:TP312文献标识码:A文章编号文章编号:16727800(2018)003021403英文摘要Abstract:Java is an object oriented programming language, has a good crossplatform,it’s inheritanc e, encapsulation, multistate features make the program more stable. Through testing the digest to crack the website, we found that the short text is encrypted in plain text is not safe. However, the method with salt can improve the security of the encryption. Salt method to retain the advantages of MD5 algorithm, by increasing the length of the original text to solve the short text summary encryption is not safe. Will be added after the message summary results into the abstract crack site. The results show that the safety of salt method is higher, and the message digest after salt is not easy to be cracked.英文关键词Key Words:message digest; method with salt; MD5; encryption0引言信息技术的快速发展,使资源获取变得越来越便捷,因此人们对身份和信息的完整性、保密性及信息的安全传输极为关注。

SpringBoot中_JAVA利用国密算法_实现内容的加密_解密

SpringBoot中_JAVA利用国密算法_实现内容的加密_解密

首先来看一下什么是国密算法:国密即国家密码局认定的国产密码算法,即商用密码。

国密主要有SM1,SM2,SM3,SM4。

密钥长度和分组长度均为128位。

1、SM1 为对称加密。

其加密强度与AES(高级加密标准,Advanced Encryption Standard)相当。

该算法不公开,调用该算法时,需要通过加密芯片的接口进行调用。

2、SM2为非对称加密,基于ECC。

该算法已公开。

由于该算法基于ECC,故其签名速度与秘钥生成速度都快于RSA。

ECC 256位(SM2采用的就是ECC 256位的一种)安全强度比RSA 2048位高,但运算速度快于RSA。

3、SM3为消息摘要。

可以用MD5作为对比理解。

该算法已公开。

校验结果为256位。

4、SM4为无线局域网标准的分组数据算法。

对称加密,密钥长度和分组长度均为128位。

由于SM1、SM4加解密的分组大小为128bit,故对消息进行加解密时,若消息长度过长,需要进行分组,要消息长度不足,则要进行填充。

在很多地方还是会用到的,这里说一下这个:SM21.在pom.xml中引入依赖jar包:<dependency><groupId>org.bouncycastle</groupId><artifactId>bcprov-jdk15on</artifactId><version>1.58</version></dependency>2.然后来写一个工具类,用来生成国密的,公钥和私钥这个密码对.import org.bouncycastle.jce.provider.BouncyCastleProvider;import java.security.*;import java.security.spec.ECGenParameterSpec;import java.security.spec.PKCS8EncodedKeySpec;import java.security.spec.X509EncodedKeySpec;import java.util.Base64;/*** @author hulala* @Description 国密公私钥对工具类public class KeyUtils {/*** 生成国密公私钥对** @return* @throws Exception*/public static String[] generateSmKey() throws Exception {KeyPairGenerator keyPairGenerator = null;SecureRandom secureRandom = new SecureRandom();ECGenParameterSpec sm2Spec = new ECGenParameterSpec("sm2p256v1");keyPairGenerator = KeyPairGenerator.getInstance("EC", new BouncyCastleProvider());keyPairGenerator.initialize(sm2Spec);keyPairGenerator.initialize(sm2Spec, secureRandom);KeyPair keyPair = keyPairGenerator.generateKeyPair();PrivateKey privateKey = keyPair.getPrivate();PublicKey publicKey = keyPair.getPublic();//String[0] 公钥//String[1] 私钥String[] result = {new String(Base64.getEncoder().encode(publicKey.getEncoded())), new String(Base64.getEncoder().encode(privateKey.getEncoded())) };return result;}/*** 将Base64转码的公钥串,转化为公钥对象** @param publicKey* @return*/public static PublicKey createPublicKey(String publicKey) {PublicKey publickey = null;try {X509EncodedKeySpec publicKeySpec = new X509EncodedKeySpec(Base64.getDecoder().decode(publicKey));KeyFactory keyFactory = KeyFactory.getInstance("EC", new BouncyCastleProvider());publickey = keyFactory.generatePublic(publicKeySpec);} catch (Exception e) {e.printStackTrace();}return publickey;}/*** 将Base64转码的私钥串,转化为私钥对象** @param privateKey* @return*/public static PrivateKey createPrivateKey(String privateKey) {PrivateKey publickey = null;try {PKCS8EncodedKeySpec pkcs8EncodedKeySpec = new PKCS8EncodedKeySpec(Base64.getDecoder().decode(privateKey));KeyFactory keyFactory = KeyFactory.getInstance("EC", new BouncyCastleProvider());publickey = keyFactory.generatePrivate(pkcs8EncodedKeySpec);} catch (Exception e) {e.printStackTrace();}return publickey;}}3.根据公钥和私钥工具类,生成的密钥对,对数据,进行加密和解密操作import org.bouncycastle.asn1.gm.GMObjectIdentifiers;import org.bouncycastle.crypto.InvalidCipherTextException;import org.bouncycastle.crypto.engines.SM2Engine;import org.bouncycastle.crypto.params.ECDomainParameters;import org.bouncycastle.crypto.params.ECPrivateKeyParameters;import org.bouncycastle.crypto.params.ECPublicKeyParameters;import org.bouncycastle.crypto.params.ParametersWithRandom;import org.bouncycastle.jcajce.provider.asymmetric.ec.BCECPrivateKey;import org.bouncycastle.jcajce.provider.asymmetric.ec.BCECPublicKey;import org.bouncycastle.jce.provider.BouncyCastleProvider;import org.bouncycastle.jce.spec.ECParameterSpec;import java.security.*;/*** @author hulala* @Description SM2实现工具类*/public class Sm2Util {static {Security.addProvider(new BouncyCastleProvider());}/*** 根据publicKey对原始数据data,使用SM2加密** @param data* @param publicKey* @return*/public static byte[] encrypt(byte[] data, PublicKey publicKey) {ECPublicKeyParameters localECPublicKeyParameters = null;if (publicKey instanceof BCECPublicKey) {BCECPublicKey localECPublicKey = (BCECPublicKey) publicKey;ECParameterSpec localECParameterSpec = localECPublicKey.getParameters();ECDomainParameters localECDomainParameters = new ECDomainParameters(localECParameterSpec.getCurve(),localECParameterSpec.getG(), localECParameterSpec.getN());localECPublicKeyParameters = new ECPublicKeyParameters(localECPublicKey.getQ(), localECDomainParameters);}SM2Engine localSM2Engine = new SM2Engine();localSM2Engine.init(true, new ParametersWithRandom(localECPublicKeyParameters, new SecureRandom()));byte[] arrayOfByte2;try {arrayOfByte2 = localSM2Engine.processBlock(data, 0, data.length);return arrayOfByte2;} catch (InvalidCipherTextException e) {e.printStackTrace();return null;}}/*** 根据privateKey对加密数据encodedata,使用SM2解密** @param encodedata* @param privateKey* @return*/public static byte[] decrypt(byte[] encodedata, PrivateKey privateKey) {SM2Engine localSM2Engine = new SM2Engine();BCECPrivateKey sm2PriK = (BCECPrivateKey) privateKey;ECParameterSpec localECParameterSpec = sm2PriK.getParameters();ECDomainParameters localECDomainParameters = new ECDomainParameters(localECParameterSpec.getCurve(),localECParameterSpec.getG(), localECParameterSpec.getN());ECPrivateKeyParameters localECPrivateKeyParameters = new ECPrivateKeyParameters(sm2PriK.getD(),localECDomainParameters);localSM2Engine.init(false, localECPrivateKeyParameters);try {byte[] arrayOfByte3 = localSM2Engine.processBlock(encodedata, 0, encodedata.length);return arrayOfByte3;} catch (InvalidCipherTextException e) {e.printStackTrace();return null;}}/*** 私钥签名** @param data* @param privateKey* @return* @throws Exception*/public static byte[] signByPrivateKey(byte[] data, PrivateKey privateKey) throws Exception { Signature sig = Signature.getInstance(GMObjectIdentifiers.sm2sign_with_sm3.toString(), BouncyCastleProvider.PROVIDER_NAME);sig.initSign(privateKey);sig.update(data);byte[] ret = sig.sign();return ret;}/*** 公钥验签** @param data* @param publicKey* @param signature* @return* @throws Exception*/public static boolean verifyByPublicKey(byte[] data, PublicKey publicKey, byte[] signature) throws Exception {Signature sig = Signature.getInstance(GMObjectIdentifiers.sm2sign_with_sm3.toString(), BouncyCastleProvider.PROVIDER_NAME);sig.initVerify(publicKey);sig.update(data);boolean ret = sig.verify(signature);return ret;}}4.来测试一下,对数据进行加密解密import org.junit.Test;import java.util.Base64;/*** @author hulala* @Description Sm2Util 的测试类*/public class Sm2UtilTest {private String testStr = "wangjing";java.security.PublicKey publicKey = null;java.security.PrivateKey privateKey = null;@Testpublic void test() throws Exception {//生成公私钥对String[] keys = KeyUtils.generateSmKey();System.out.println("原始字符串:" + testStr);System.out.println("公钥:" + keys[0]);publicKey = KeyUtils.createPublicKey(keys[0]);System.out.println("私钥:" + keys[1]);privateKey = KeyUtils.createPrivateKey(keys[1]);System.out.println("");byte[] encrypt = Sm2Util.encrypt(testStr.getBytes(), publicKey);String encryptBase64Str = Base64.getEncoder().encodeToString(encrypt);System.out.println("加密数据:" + encryptBase64Str);byte[] decode = Base64.getDecoder().decode(encryptBase64Str);byte[] decrypt = Sm2Util.decrypt(decode, privateKey);System.out.println("解密数据:" + new String(decrypt));byte[] sign = Sm2Util.signByPrivateKey(testStr.getBytes(), privateKey);System.out.println("数据签名:" + Base64.getEncoder().encodeToString(sign));boolean b = Sm2Util.verifyByPublicKey(testStr.getBytes(), publicKey, sign);System.out.println("数据验签:" + b);}}5.这样就实现了利用国密,SM2进行加密解密了.。

JAVA加密解密之消息摘要算法

JAVA加密解密之消息摘要算法

JAVA加密解密之消息摘要算法消息摘要算法是一种用于计算消息摘要(也称为哈希值)的算法。

它将任意长度的输入消息转换为固定长度的输出,该输出称为消息摘要。

在 Java 中,有多种消息摘要算法可供选择,例如MD5、SHA-1、SHA-256等。

下面将详细介绍几种常用的消息摘要算法以及如何在 Java中使用它们进行加密和解密。

1. MD5(Message Digest 5)算法:MD5算法以512位分组来处理输入消息,并产生一个128位(16字节)的消息摘要。

代码示例如下:```javaimport java.security.MessageDigest;import java.security.NoSuchAlgorithmException;public class MD5Examplepublic static void main(String[] args)String message = "Hello, world!";System.out.println(digest);}tryMessageDigest md = MessageDigest.getInstance("MD5");byte[] digest = md.digest(message.getBytes();StringBuilder sb = new StringBuilder(;for (byte b : digest)sb.append(String.format("%02x", b & 0xff));}return sb.toString(;} catch (NoSuchAlgorithmException e)e.printStackTrace(;return null;}}```2. SHA-1(Secure Hash Algorithm 1)算法:SHA-1算法与MD5算法类似,但它产生一个160位(20字节)的消息摘要。

MessageDigest的功能及用法

MessageDigest的功能及用法

MessageDigest的功能及⽤法MessageDigest 类为应⽤程序提供信息摘要算法的功能,如 MD5 或 SHA 算法。

信息摘要是安全的单向哈希函数,它接收任意⼤⼩的数据,并输出固定长度的哈希值。

MessageDigest 对象开始被初始化。

该对象通过使⽤ update()⽅法处理数据。

任何时候都可以调⽤ reset()⽅法重置摘要。

⼀旦所有需要更新的数据都已经被更新了,应该调⽤digest() ⽅法之⼀完成哈希计算。

对于给定数量的更新数据,digest⽅法只能被调⽤⼀次。

在调⽤digest之后,MessageDigest 对象被重新设置成其初始状态。

1、public static getInstance( algorithm)throws返回实现指定摘要算法的 MessageDigest 对象。

algorithm - 所请求算法的名称2、public static getInstance( algorithm,provider)throws ,返回实现指定摘要算法的 MessageDigest 对象。

algorithm - 所请求算法的名称provider - 提供者的名称。

3、public void update(byte[] input)使⽤指定的 byte 数组更新摘要。

4、public byte[] digest()通过执⾏诸如填充之类的最终操作完成哈希计算。

在调⽤此⽅法之后,摘要被重置。

5、public static boolean isEqual(byte[] digesta,byte[] digestb)⽐较两个摘要的相等性。

做简单的字节⽐较。

注意:Provider可以通过.security.⽅法获取已注册提供者列表。

⽐较常⽤的有“SUN”SUN提供的常⽤的名称有:MD2MD5SHA-1SHA-256SHA-384SHA-512Code举例:import java.security.*;public class myDigest {public static void main(String[] args) {myDigest my=new myDigest();my.testDigest();}public void testDigest(){try {String myinfo="我的测试信息";//java.security.MessageDigest alg=java.security.MessageDigest.getInstance("MD5");java.security.MessageDigest alga=java.security.MessageDigest.getInstance("SHA-1");alga.update(myinfo.getBytes());byte[] digesta=alga.digest();System.out.println("本信息摘要是:"+byte2hex(digesta));//通过某中⽅式传给其他⼈你的信息(myinfo)和摘要(digesta) 对⽅可以判断是否更改或传输正常java.security.MessageDigest algb=java.security.MessageDigest.getInstance("SHA-1");algb.update(myinfo.getBytes());if (algb.isEqual(digesta,algb.digest())) {System.out.println("信息检查正常");}else{System.out.println("摘要不相同");}}catch (java.security.NoSuchAlgorithmException ex) { System.out.println("⾮法摘要算法");}}public String byte2hex(byte[] b) //⼆⾏制转字符串{String hs="";String stmp="";for (int n=0;n<b.length;n++){stmp=(ng.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();}}关于Java加密的更多信息:。

《JavaWeb安全开发指南》

《JavaWeb安全开发指南》

《JavaWeb安全开发指南》随着互联网的迅速发展,基于JavaWeb的应用也越来越多,但是随之而来的安全风险也在不断增多。

在JavaWeb开发中,安全性是至关重要的,因此我们需要对JavaWeb安全开发进行全面的了解和掌握,以便于更好地保障我们的JavaWeb应用程序的安全性。

1. 安全风险与威胁JavaWeb开发中的安全风险主要有以下几个方面:- SQL注入:黑客通过构造特殊的SQL语句,在无需登录的情况下就能够直接访问并控制数据库中的数据。

- XSS攻击:黑客通过在网站表单中注入JavaScript脚本,让其他用户在浏览网站时受到攻击。

- CSRF攻击:黑客通过伪造用户的登录信息,在用户不知情的情况下进行指定操作,如转账等。

- 文件上传漏洞:未对上传的文件进行严格的安全校验,导致黑客上传恶意文件进而实施攻击。

- 权限不足:未对各种操作的权限进行限制,导致恶意用户权限提升进而通过应用系统获取更多敏感数据。

以上这些安全威胁都是极其危险的,因此在JavaWeb开发中,必须要认真对待并进行严格的防范。

2. 如何进行JavaWeb的安全开发?JavaWeb安全开发需要从以下几个方面入手:- 输入校验:对用户输入的数据进行严格校验,防止数据篡改和攻击。

- 权限认证:对用户进行严格的身份验证和访问控制,以确保只有授权用户才能够访问敏感信息。

- 模板引擎安全:防范模板注入、命令注入等安全问题。

- 密码加密:对于数据库中的密码等敏感信息进行加密处理,防止其被黑客直接获得。

- 对拒绝服务攻击的防范:通过对流量控制、缓存控制等方式,防范拒绝服务攻击。

- 安全日志:记录各种异常操作,及时发现并修复问题。

3. 安全防范技术JavaWeb开发中安全防范技术主要包括以下几个方面:- SSL:创建安全的连接,防止信息被黑客拦截。

- 数据加密:采用对称加密与非对称加密方法对重要数据进行加密,既保证传输安全,又能够保障数据的完整性。

使用java获取md5值的两种方法

使用java获取md5值的两种方法

使⽤java获取md5值的两种⽅法Message Digest Algorithm MD5(中⽂名为消息摘要算法第五版)为计算机安全领域⼴泛使⽤的⼀种散列函数,是⼀种⽐较常⽤的哈希算法。

复制代码代码如下:public class md5_test {//MD5的字符串常量private final static String[] hexDigits = { "0", "1", "2", "3", "4","5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f" };public static void main(String[] args) {// TODO Auto-generated method stubtry {MessageDigest messageDigest= MessageDigest.getInstance("MD5");System.out.println(byteArrayToHexString(messageDigest.digest("".getBytes())));} catch (NoSuchAlgorithmException e) {// TODO Auto-generated catch blocke.printStackTrace();}}private static String byteArrayToHexString(byte[] b) {StringBuffer resultSb = new StringBuffer();for (int i = 0; i < b.length; i++) {resultSb.append(byteToHexString(b[i]));}return resultSb.toString();}/** 将⼀个字节转化成⼗六进制形式的字符串 */private static String byteToHexString(byte b) {int n = b;if (n < 0)n = 256 + n;int d1 = n / 16;int d2 = n % 16;return hexDigits[d1] + hexDigits[d2];}}复制代码代码如下:import mons.codec.digest.DigestUtils;public class ToMain {public static void main(String[] args) {System.out.println(DigestUtils.md5Hex(""));}}。

Java语言对于网络安全的支持与应用

Java语言对于网络安全的支持与应用

Java语言网络安全的支持与实现程杰(郑州大学升达经贸管理学院资讯管理系,郑州451191)摘要:二十一世纪随着人们的生活和工作越来越网络化,网络安全已渐渐成为人们关心的一个重要问题。

要保证信息在网络环境下是安全的,就必须对信息进行加密、签名、验证等一系列的操作。

而Java语言能够对网络安全通信进行很好的支持。

本文首先阐述了如何通过Java JDK本身提供的安全工具来实现玩了过安全通信,而后又阐述了如何通过Java语言来开发网络安全的应用程序。

关键字:安全策略;权限;数字签名;密钥;X.509;证书1. 引言随着计算机技术的飞速发展,信息网络已经成为社会发展的重要保证。

信息网络涉及到国家的政府、军事、文教等诸多领域。

其中存贮、传输和处理的信息有许多是重要的政府宏观调控决策、商业经济信息、银行资金转帐、股票证券、能源资源数据、科研数据等重要信息。

有很多是敏感信息,甚至是国家机密。

所以难免会吸引来自世界各地的各种人为攻击(例如信息泄漏、信息窃取、数据篡改、数据删添、计算机病毒等)。

为了保证网络中的信息是安全的,必须采用一些加密、数字签名、身份认证等安全策略来有效地防范网络安全。

Java语言在网络安全方面提供了很强大的技术支持,从而能够很有效地保护信息在网络中的保密性,完整性和可用性。

2. java 语言安全性概述2.1系统结构对于Java JDK,无论代码在本地还是在远端运行,都要对应一个安全策略(security policy)。

安全策略定义了不同签名者、不同来源的一套权限控制策略(permissions),在权限控制中说明了对资源(如文件、目录、网络端口等)的访问的权限,如图1所示:收稿日期:2009-2-23作者简介:程杰(1978-)男,硕士,主要从事计算机网络与网络安全方面的研究图1 Java 1.4 安全模型运行系统将代码组织到单独的域(domains) 中,每个域封装一组具有相同控制权限的类的实例。

java中使用MD5进行计算摘要

java中使用MD5进行计算摘要

java中使⽤MD5进⾏计算摘要java中使⽤MD5进⾏加密在各种应⽤系统的开发中,经常需要存储⽤户信息,很多地⽅都要存储⽤户密码,⽽将⽤户密码直接存储在服务器上显然是不安全的,本⽂简要介绍⼯作中常⽤的 MD5加密算法,希望能抛砖引⽟。

(⼀)消息摘要简介⼀个消息摘要就是⼀个数据块的数字指纹。

即对⼀个任意长度的⼀个数据块进⾏计算,产⽣⼀个唯⼀指印(对于SHA1是产⽣⼀个20字节的⼆进制数组)。

消息摘要是⼀种与消息认证码结合使⽤以确保消息完整性的技术。

主要使⽤单向散列函数算法,可⽤于检验消息的完整性,和通过散列密码直接以⽂本形式保存等,⽬前⼴泛使⽤的算法有MD4、MD5、SHA-1。

消息摘要有两个基本属性:1. 两个不同的报⽂难以⽣成相同的摘要2. 难以对指定的摘要⽣成⼀个报⽂,⽽可以由该报⽂反推算出该指定的摘要代表:美国国家标准技术研究所的SHA1和⿇省理⼯学院Ronald Rivest提出的MD5(⼆)对字符串进⾏加密/**利⽤MD5进⾏加密* @param str 待加密的字符串* @return加密后的字符串* @throws NoSuchAlgorithmException 没有这种产⽣消息摘要的算法* @throws UnsupportedEncodingException*/public String EncoderByMd5(String str) throws NoSuchAlgorithmException, UnsupportedEncodingException{//确定计算⽅法MessageDigest md5=MessageDigest.getInstance("MD5");BASE64Encoder base64en = new BASE64Encoder();//加密后的字符串String newstr=base64en.encode(md5.digest(str.getBytes("utf-8")));return newstr;}调⽤函数:String str="0123456789"System.out.println(EncoderByMd5(str));输出:eB5eJF1ptWaXm4bijSPyxw==(三)验证密码是否正确因为MD5是基于消息摘要原理的,消息摘要的基本特征就是很难根据摘要推算出消息报⽂,因此要验证密码是否正确,就必须对输⼊密码(消息报⽂)重新计算其摘要,和数据库中存储的摘要进⾏对⽐(即数据库中存储的其实为⽤户密码的摘要),若两个摘要相同,则说明密码正确,不同,则说明密码错误。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
比。
在 JP系统 中的具体 参考 代码 如下 : S
<%@ p g a gae=”aa m ot jv . t.:, v .q.,,n rp. ”pg E cdn ” b ” ael u g n j ”i p r =” aa ui l j a s1 I ecy t v l c a = ae no ig g k
作者简介 : 陈坤定 ( 9 3) 男 , 17 . , 福建永定人 , 师 , 讲 主要从事软件技术数据库研究 。
40 1


大ห้องสมุดไป่ตู้



第2 2卷
图 1 用户 注册 过程
图 2 用户 登 录 过 程
摘要算 法在 Jv b中的具体 实 现 可 以通 过 jv.eui aaWe aascry包 的 M sae i s类 或 者 A ah o m n t esgDg t e pcecm os 的 Dgs ts iet i 工具 类来完 成 。第一 种方法 是 由 S N公 司提 供 的面 向底 层 的算法 , Ul U 缺少 相应 的进 制转 换实 现 , 无法 将其 字节数 组形 式 的摘要信 息转 为十 六进制 字 符 串 , 用不 是很 方 便 。第二 种 方 法支 持 多 种形 式 的支 使 持, 支持 十六进 制形 式 的摘要信 息 , 用较 为方便 L 。 使 2 ]
n m = rq etgtaa e r ” a e ) ae e us.e rm t ( n m ” ; P e
i nme! = nl f(a u1 ){
42 1






第2 2卷
n m = n w Sr g n m . e ye( IO一 8 9—1 ) ; ae e tn ( a e gt t ”S 8 5 i B s ” ) n m = MD n o e. E cy tn m ) ae E cd rMD n r ( a e ; p
S rn t = ””: t g sr i S rn e t g tmpS r = ””: i t
f (n = 1 0 it r i ;i< dgs. nt;+ +) iet1 g i e h { t Sr = (nee.o eSr g dgs[]& 0f ) e t mp ItgrtH xtn (ieti i x) ; i t Sr1 gh ) == 1 { f e t e t( ( mp . n )
sr = sr + ”0” + tm p t t t e Sr;

e e l { s
sr = sr + t mp t ; t t e S r


rtm t tL w r ae ) e u s . o eC s ( ; ro

其 中方法 M E c p( 是将字符串 i进行消息摘要处理 , D nr t) y n 并将得到的十六进制字符 …
2 用 户 登 录 过 程
登 录时 , 对输 入 的用户 名 、 密码 , 明文 进行 摘 要 处 理 ( 限 于 明文 到 密 文 的转 换 , 要 算 法 不 可逆 , 即 仅 摘 不
能从密文转换成明文) 将处理的摘要信息通过数据库进行查询。登录过程见序列图 2 , 。
收 稿 日期 :0 20 -8 2 1 -30
过 另一 个方 法 btTSr g ) y otn ( 转换 为字 符 串 。 e i ( ) MD noe 部 署 到系统 中。 2将 E cdr ( ) 用摘要 加 密功能 。 3使
信息摘要通
① 调 用 MD noe. E cyt) E cdrMD nrp( 对初 始 注册 的用 户名 和密码 进行 摘要 加密 并保存 到数 据库 中。 ② 用 户登 录时 , 将用 户名 和密 码进行 摘 要加 密 , 后将 加 密 后 的信 息 摘 要 和数 据 库提 取 的数 据 进 行对 然
() 1 编写 Jv B a aa en
p c a e e c y t a k g n rp ;
i p rjv .eu t. ; m ot aa sc ry i
p b i ls u lc c a s MDEn o e cd r
p bi s t tn E cy tSr gi) u l t i Sr gMD n rp( tn { c ac i i n
/ 做 十六进 制 的编码处 理 . /
o t= b tT Sr g dgs) u y o tn ( iet ; e i
} cth N scAgrh E cpi ) a ( 0uh l0 tm xetne { c i 0
e pitt k rc ( ; .r Sa Tae ) n c }
身份及授权使 用等方式 已经难 以保证信息安全 , 采取其 它更 为保 险 的方法 已势在必行 。其 中, 消息摘要 算法就是

关 键 词 : 息 摘 要 算 法 ;aaWe ; 5 S 消 Jv b MD ;HA
中图分类号 :P 9. 8 T 3 3 0
0 引 言
Jv b作 为 目前 构建 w b应 用 系统 、 持 动态 处 理 的程 序 设计 技 术 , aaWe e 支 在市 场 上 已经 表现 出非 常 强 大 的生命 力 。利用 这种 技术 可 以建 立先 进 、 安全 和 跨平 台的动 态 网站 , 多企业 也都 采 用 JE 很 2 E来构 建企 业 门
息。
1 用户注册过程
用户注册时 , 有些系统只对密码而没有对用户名进行摘要处理 , 这样容易使一些有不 良企图的、 能够访
问数据 库企 业 内部员 工 , 能很 轻松 地利 用 同样 的摘要 算 法 生成 新 密码 , 用 户 的 旧密码 进 行覆 盖 , 后 用 将 对 然 新 的密 码登 录 冒充用 户 的身份 做一 些有 损用 户利 益 的操 作 。而 且有 的人 在 覆 盖密 码 以前 , 把 原 来 的 旧密 先
第 4期
r t n ut; e ur o
陈坤定 : 消息摘 要算 法在 JvWe aa b系统 中的应用
41 1


将 字 节型 数组 转换成 字符 串

; l :

pb c t i S i y T S i (y [ d e ) ul ac tn bt otn bt ] i s { i s t r g e r g e gt
<h ml> t <b d o y>
<%
C n et ncn = d .e on ci ( ;/ o n c o o i b g t n et n ) / 连接 到数据 库 C o
Pr p r dS ae n s =n l e a e tt me tp ul; Re u e s =n l ; s hS tr u l S rn t ,n me,pa s r t g sr a i s wo d;

龙岩 3 4 2 ) 60 1
要: 随着 Jv b的广泛应 用, aaWe 系统 中的信息安全性也显得越 来越 重要 。原来单 纯的用户名和 口令鉴别 用户 种比较 有效的方法。据此 , 文详 细介 绍消息摘要 算法在 Jv b系统的使 用 , 本 aaWe 以进一 步提 高系统 的安全性 。 文献标志码 : A 文章编号 :09— 9 7 2 1 )4— 4 9— 10 30 【0 2 0 0 0 0 4
M e s g Die tm d = n l ; sa e g s u l
S rn u : n l ; t got i u l
t{ r y
/ 初始化 MesgD gs, J V 6中支持 MD 、 5 S / sae i t在 A A e 2 MD 、HA一1 S A一 5 、H 、H 2 6 S A一34、H 5 2 8 S A一 1
消息摘要算法是将任意长度的“ 字节串” 变换成一个固定位数 的大整数 , 并且是一个不可逆的字符串变
换 算法 。消息摘 要算 法 的典 型应用 是 对 一段 字 节 串产 生 指 纹 , 以防止 消 息 在传 输 过 程 中被 “ 改 ” 从 而 保 篡 ,
证 数据 的完整性 。
另外 , 它还 广泛应 用 在加 密 和解 密 技术 上 , Jv b系统 中 , 以用 来 加 密 敏感 的账 号 或 密码 等 信 在 aaWe 可
2 1 第 一种方 法 .
在 J V 6中使 用摘 要算 法 比较 简单 , AA 只要 导 入 j ascry包使 用 MesgDgt 类 生成 一 个 JvB a a .eu t v i sae i s et aa en 就 可 以在 Jv b系统 中使 用 。 aaWe 具体 过程 :
c n e t y e:”tx/h ml c re g k”% > o tnT p e t t : has t b
< s :sB a j ue eni p d=” b cp d ”so e=” ae ls =” B o n D cn ”/> p g ”c s D cn . B o n a
md = M sae i s gt s ne ” 5 )/ 可设 其 他 算 法 , MD 、H esgDg t ent c ( MD ” ;/ e. I a 如 2 S A一1 S A 一26 S A一34、 、H 5 、H 8
SHA 一 51 2
/ 执行 消息 摘要 /
bt ]d e y [ is e g t=m .i s i.e y s ) ; d d et ngt t ( ) g ( Be

psw r = rq etgtaa e r ” asod ) as od e u s eP rm t ( p s r” ; . e w
i ps od! = nl { f(as r w u1 ) p s o = n w Sr g p s od gtye( IO一 8 9—1 ) ; as r w d e tn ( as r.eB ts ”S 8 5 i w ” )
相关文档
最新文档