java易懂易用的MD5加密(可直接运行) (1)第1/2页
程序员文章站
2023-12-04 10:16:52
1、md5加密,该加密算法是单向加密,即加密的数据不能再通过解密还原。相关类包含在java.security.messagedigest包中。 2、3-des加密,该加密算...
1、md5加密,该加密算法是单向加密,即加密的数据不能再通过解密还原。相关类包含在java.security.messagedigest包中。
2、3-des加密,该加密算法是可逆的,解密方可以通过与加密方约定的密钥匙进行解密。相关类包含在javax.crypto.*包中。
3、base64编码,是用于传输8bit字节代码最常用的编码方式。相关类在sun.misc.base64decoder 和sun.misc.base64encoder 中。
4、urlencoder编码,是一种字符编码,保证被传送的参数由遵循规范的文本组成。相关类在java.net.urlencoder包中。
细节:
1、进行md5加密,得到byte[]
/**
* 进行md5加密
* @param string 原始的spkey
* @return byte[] 指定加密方式为md5后的byte[]
*/
private byte[] md5(string strsrc)
{
byte[] returnbyte = null;
try
{
messagedigest md5 = messagedigest.getinstance("md5");
returnbyte = md5.digest(strsrc.getbytes("gbk"));
}
catch(exception e)
{
e.printstacktrace();
}
return returnbyte;
}
2、得到3-des的密钥匙
/**
* 得到3-des的密钥匙
* 根据根据需要,如密钥匙为24个字节,md5加密出来的是16个字节,因此后面补8个字节的0
* @param string 原始的spkey
* @return byte[] 指定加密方式为md5后的byte[]
*/
private byte[] getenkey(string spkey)
{
byte[] deskey=null;
try
{
byte[] deskey1 = md5(spkey);
deskey = new byte[24];
int i = 0;
while (i < deskey1.length && i < 24) {
deskey[i] = deskey1[i];
i++;
}
if (i < 24) {
deskey[i] = 0;
i++;
}
}
catch(exception e){
e.printstacktrace();
}
return deskey;
}
3、3-des加密
/**
* 3-des加密
* @param byte[] src 要进行3-des加密的byte[]
* @param byte[] enkey 3-des加密密钥
* @return byte[] 3-des加密后的byte[]
*/
public byte[] encrypt(byte[] src,byte[] enkey)
{
byte[] encrypteddata = null;
try
{
desedekeyspec dks = new desedekeyspec(enkey);
secretkeyfactory keyfactory = secretkeyfactory.getinstance("desede");
secretkey key = keyfactory.generatesecret(dks);
cipher cipher = cipher.getinstance("desede");
cipher.init(cipher.encrypt_mode, key);
encrypteddata = cipher.dofinal(src);
}
catch(exception e)
{
e.printstacktrace();
}
return encrypteddata;
}
4、对字符串进行base64编码
/**
* 对字符串进行base64编码
* @param byte[] src 要进行编码的字符
*
* @return string 进行编码后的字符串
*/
public string getbase64encode(byte[] src)
{
string requestvalue="";
try{
base64encoder base64en = new base64encoder();
requestvalue=base64en.encode(src);
//system.out.println(requestvalue);
}
catch(exception e){
e.printstacktrace();
}
return requestvalue;
}
2、3-des加密,该加密算法是可逆的,解密方可以通过与加密方约定的密钥匙进行解密。相关类包含在javax.crypto.*包中。
3、base64编码,是用于传输8bit字节代码最常用的编码方式。相关类在sun.misc.base64decoder 和sun.misc.base64encoder 中。
4、urlencoder编码,是一种字符编码,保证被传送的参数由遵循规范的文本组成。相关类在java.net.urlencoder包中。
细节:
1、进行md5加密,得到byte[]
复制代码 代码如下:
/**
* 进行md5加密
* @param string 原始的spkey
* @return byte[] 指定加密方式为md5后的byte[]
*/
private byte[] md5(string strsrc)
{
byte[] returnbyte = null;
try
{
messagedigest md5 = messagedigest.getinstance("md5");
returnbyte = md5.digest(strsrc.getbytes("gbk"));
}
catch(exception e)
{
e.printstacktrace();
}
return returnbyte;
}
2、得到3-des的密钥匙
复制代码 代码如下:
/**
* 得到3-des的密钥匙
* 根据根据需要,如密钥匙为24个字节,md5加密出来的是16个字节,因此后面补8个字节的0
* @param string 原始的spkey
* @return byte[] 指定加密方式为md5后的byte[]
*/
private byte[] getenkey(string spkey)
{
byte[] deskey=null;
try
{
byte[] deskey1 = md5(spkey);
deskey = new byte[24];
int i = 0;
while (i < deskey1.length && i < 24) {
deskey[i] = deskey1[i];
i++;
}
if (i < 24) {
deskey[i] = 0;
i++;
}
}
catch(exception e){
e.printstacktrace();
}
return deskey;
}
3、3-des加密
复制代码 代码如下:
/**
* 3-des加密
* @param byte[] src 要进行3-des加密的byte[]
* @param byte[] enkey 3-des加密密钥
* @return byte[] 3-des加密后的byte[]
*/
public byte[] encrypt(byte[] src,byte[] enkey)
{
byte[] encrypteddata = null;
try
{
desedekeyspec dks = new desedekeyspec(enkey);
secretkeyfactory keyfactory = secretkeyfactory.getinstance("desede");
secretkey key = keyfactory.generatesecret(dks);
cipher cipher = cipher.getinstance("desede");
cipher.init(cipher.encrypt_mode, key);
encrypteddata = cipher.dofinal(src);
}
catch(exception e)
{
e.printstacktrace();
}
return encrypteddata;
}
4、对字符串进行base64编码
复制代码 代码如下:
/**
* 对字符串进行base64编码
* @param byte[] src 要进行编码的字符
*
* @return string 进行编码后的字符串
*/
public string getbase64encode(byte[] src)
{
string requestvalue="";
try{
base64encoder base64en = new base64encoder();
requestvalue=base64en.encode(src);
//system.out.println(requestvalue);
}
catch(exception e){
e.printstacktrace();
}
return requestvalue;
}
1
上一篇: 软文推广写作:文案是企业品牌营销的利器
下一篇: android相册选择图片的编码实现代码