几种加密算法在java中的应用

加密的原理咱就不讲了(讲也讲不明白),开发过项目的都知道密码不能明文存放,这大家都知道吧!咋办呢,一般都会用消息摘要算法算出一个摘要值保存起来(当然也可以使用对称加密,这样还能找回原来的密码),先看看消息摘要算法的使用,这些算法都jdk都有实现,我们要做的就是调用.直接贴代码



import java.security.MessageDigest;
import java.security.Provider;
import org.bouncycastle.jce.provider.BouncyCastleProvider;

/**
* Title: 消息摘要帮助类
* fileName: MessageDigestHelper.java
* Description: 默认使用SHA-1算法 BouncyCastleProvider的算法实现
* @author: 康庆
* @version:1.0
*
*/
public class MessageDigestHelper{
/**使用的默认摘要算法*/
private String algorithm = "SHA-1";
/**默认的安全提供程序实现*/
private Provider provider = new BouncyCastleProvider();
/**摘要对象*/
private MessageDigest messageDigest = null;

public MessageDigestHelper() {
init();
}
/**
* 初始化消息摘要对象
* @author: 康庆
* @version:1.0
* create date:2009-4-25
*/
private void init(){
try{
this.messageDigest = MessageDigest.getInstance(algorithm,provider);
}catch(Exception e){
throw new RuntimeException(e);
}
}
/**
* 使用指定的算法初始化消息摘要对象
* @param algorithm
*/
public MessageDigestHelper(String algorithm){
this.algorithm = algorithm;
this.init();
}
/**
* 使用指定的安全提供程序初始化消息摘要对象
* @param provider
*/
public MessageDigestHelper(Provider provider){
this.provider = provider;
this.init();
}

/**
* 使用指定的算法和安全提供程序初始化消息摘要对象
* @param algorithm
* @param provider
*/
public MessageDigestHelper(String algorithm, Provider provider){
this.algorithm = algorithm;
this.provider = provider;
this.init();
}
/**
* 以字节数组的方式获得消息的摘要
* @param message
* @return
* @author: 康庆
* @version:1.0
* create date:2009-4-25
*/
public byte[] getBytesDigest(String message){
if(message == null){
throw new IllegalArgumentException("无法对空文本提取消息摘要");
}
messageDigest.update(message.getBytes());
return messageDigest.digest();
}

/**
* 获得字节数组的字节形式的摘要信息
* @param message
* @return
* @author: 康庆
* @version:1.0
* create date:2009-4-25
*/
public byte[] getBytesDigest(byte[] message){
if(message == null){
throw new IllegalArgumentException("无法对空文本提取消息摘要");
}
messageDigest.update(message);
return messageDigest.digest();
}
/**
* 以十六进制字符串的形式获得消息摘要
* @param message
* @return
* @author: 康庆
* @version:1.0
* create date:2009-4-25
*/
public String getHexStringDigest(String message){
return SecurityHelper.toHex(getBytesDigest(message));
}

/**
* 以十六进制字符串的形式获得消息摘要
* @param message
* @return
* @author: 康庆
* @version:1.0
* create date:2009-4-25
*/
public String getHexStringDigest(byte[] message){
return SecurityHelper.toHex(getBytesDigest(message));
}
/**
* 以Base64编码的方式获得消息摘要
* @param message
* @return
* @author: 康庆
* @version:1.0
* create date:2009-4-25
*/
public String getBase64StringDigest(String message){
return SecurityHelper.toBase64(getBytesDigest(message));
}

/**
* 以Base64编码的方式获得消息摘要
* @param message
* @return
* @author: 康庆
* @version:1.0
* create date:2009-4-25
*/
public String getBase64StringDigest(byte[] message){
return SecurityHelper.toBase64(getBytesDigest(message));
}

public static void main(String[] args) throws Exception{
MessageDigestHelper helper = new MessageDigestHelper();
System.out.println(helper.getBase64StringDigest("weblogic"));
System.out.println(helper.getHexStringDigest("weblogic"));


// System.out.println(helper2.getStringDigest("康庆asdf"));
// System.out.println(helper2.getStringDigest("康庆asdf").length());
}

}

这是在java代码中使用消息摘要算法,oracle数据库中的实现函数如下

CREATE OR REPLACE FUNCTION TO_MD5HEX (input_string IN VARCHAR2)
RETURN VARCHAR2
IS
raw_input RAW (128)
:= UTL_RAW.cast_to_raw (input_string);
decrypted_raw RAW (2048);
error_in_input_buffer_length EXCEPTION;
BEGIN
DBMS_OBFUSCATION_TOOLKIT.md5 (input => raw_input,
checksum => decrypted_raw
);
RETURN UPPER (RAWTOHEX (decrypted_raw));
END;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值