`

易懂易用的MD5加密(可直接运行)

阅读更多
 
<!----> 概述:
出于安全考虑,网络的传输中经常对传输数据做加密和编码处理,其中涉及以下几种: 

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;
 }

5、根据需要可以去掉字符串的换行符号
/**
 * 去掉字符串的换行符号
 * base64编码3-DES的数据时,得到的字符串有换行符号,根据需要可以去掉
     */

 private String filter(String str)
 {
  String output = null;
  StringBuffer sb = new StringBuffer();
  for(int i = 0; i < str.length(); i++)
  {
  int asc = str.charAt(i);
  if(asc != 10 && asc != 13)
  sb.append(str.subSequence(i, i + 1));
  }
  output = new String(sb);
  return output;
 }

6、对字符串进行URLDecoder.encode(strEncoding)编码
/**
  * 对字符串进行URLDecoder.encode(strEncoding)编码
  * @param String src 要进行编码的字符串
  * 
  * @return  String 进行编码后的字符串
  */
 
 public String getURLEncode(String src)
 {
  String requestValue="";
  try{
 
  requestValue = URLEncoder.encode(src);
  }
  catch(Exception e){
    e.printStackTrace();
  }
 
  return requestValue;
 }

7、对字符串进行URLDecoder.decode(strEncoding)解码
/**
  * 对字符串进行URLDecoder.decode(strEncoding)解码
  * @param String src 要进行解码的字符串
  * 
  * @return  String 进行解码后的字符串
  */
 
 public String getURLDecoderdecode(String src)
 {   
  String requestValue="";
  try{
 
  requestValue = URLDecoder.decode(src);
  }
  catch(Exception e){
    e.printStackTrace();
  }
 
  return requestValue;
 }

8、进行3-DES解密(密钥匙等同于加密的密钥匙)
/**
  * 
  *进行3-DES解密(密钥匙等同于加密的密钥匙)。 
  * @param byte[]  src 要进行3-DES解密byte[] 
  * @param   String spkey分配的SPKEY
  * @return  String 3-DES解密后的String
  */
 public String deCrypt(byte[] debase64,String spKey)
 {
  String strDe = null;
  Cipher cipher = null;
  try
  {
  cipher=Cipher.getInstance("DESede");
  byte[] key = getEnKey(spKey);
  DESedeKeySpec dks = new DESedeKeySpec(key);
  SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DESede");
  SecretKey sKey = keyFactory.generateSecret(dks);
  cipher.init(Cipher.DECRYPT_MODE, sKey);
  byte ciphertext[] = cipher.doFinal(debase64);
  strDe = new String(ciphertext,"UTF-16LE"); 
  }
  catch(Exception ex)
  {
   strDe = "";
   ex.printStackTrace();
  }
  return strDe;

经过以上步骤就可以完成MD5加密,3-DES加密、base64编码传输、base64解码、3-DES解密得到原文。
 
分享到:
评论

相关推荐

    java易懂易用的MD5加密(可直接运行) (1)第1/2页

    由于其单向性,即输入数据经过MD5运算后不能直接还原回原始数据,这使得它适用于存储密码的不可逆加密。在Java中,`java.security.MessageDigest` 类提供了MD5加密的功能。下面是如何在Java中使用MD5进行加密的示例...

    swift-YZYMD5用Swift编程语言编写用来计算文本和文件的MD5值

    - **API易用性**:库提供简单易懂的接口,使得开发者可以轻松地计算文本或文件的MD5值。 4. **使用YZYMD5库**:在Swift项目中,首先需要通过CocoaPods或Carthage等依赖管理工具将YZYMD5库引入。然后,调用库提供的...

    创业者同盟网站系统 v1.0

    综上所述,"创业者同盟网站系统 v1.0"是一个安全、易用且可定制的平台,它的MD5加密确保了用户数据的安全,UBB编辑器简化了内容创建,而公开的源代码则为开发者提供了广阔的创新空间。无论是创业者还是技术爱好者,...

    shiro教程文档-张开涛

    Apache Shiro 是一个强大且易用的 Java 安全框架,提供认证、授权、加密和会话管理功能,可简化企业级应用的安全实现。张开涛是一位知名的 Java 技术专家,他的 Shiro 教程深入浅出地介绍了 Shiro 的各个方面,适合...

    易语言源码易语言宽带防盗拨号器源码.rar

    通常会将用户输入的信息与服务器上的数据进行比对,有时还会结合MD5或SHA等哈希算法来增强安全性。 2. **拨号逻辑**:这部分代码处理拨号连接的建立和断开。在易语言中,可能需要使用系统API调用来实现拨号操作,如...

    酷睿股票私募网站管理系统 V2010 SP2

    后台管理方便、易懂、易用、人性化,对操作人员技术要求低,没有建站知识的操作人员都可轻松进行。继续ASP开源之路,稳定、安全、强大的核心程序,对于有网站设计知识和程序爱好者可以随心所欲进行修改,方便建立...

    酷睿财经门户网站管理系统 V2011

    后台管理方便、易懂、易用、人性化,对操作人员技术要求低,没有建站知识的操作人员都可轻松进行。继续ASP开源之路,稳定、安全、强大的核心程序,对于有网站设计知识和程序爱好者可以随心所欲进行修改,方便建立...

    易语言征服登录器

    易语言支持多种加密算法,如MD5、SHA等,可以在源码中看到具体实现。 5. **错误处理**:登录器还需要处理各种可能出现的错误情况,如网络断开、服务器无响应等,为用户提供友好的错误提示。 6. **游戏数据加载**:...

    酷睿股票私募网站管理系统V2010 SP3

    后台管理方便、易懂、易用、人性化,对操作人员技术要求低,没有建站知识的操作人员都可轻松进行。继续ASP开源之路,稳定、安全、强大的核心程序,对于有网站设计知识和程序爱好者可以随心所欲进行修改,方便建立...

    酷睿股票私募网站管理系统 V2011.rar

    后台管理方便、易懂、易用、人性化,对操作人员技术要求低,没有建站知识的操作人员都可轻松进行。继续ASP开源之路,稳定、安全、强大的核心程序,对于有网站设计知识和程序爱好者可以随心所欲进行修改,方便建立...

    酷睿股票私募网站管理系统 V2011

    后台管理方便、易懂、易用、人性化,对操作人员技术要求低,没有建站知识的操作人员都可轻松进行。继续ASP开源之路,稳定、安全、强大的核心程序,对于有网站设计知识和程序爱好者可以随心所欲进行修改,方便建立...

    创力网站管理系统 v4.2

    &lt;br&gt;系统安全: CLCMS以安全为基础,密码采用MD5加密,保证用户资料安全,程序代码中设计周密,可自动屏蔽恶意攻击代码,更集成防SQL注入程序。从而可全面防止各种SQL注入攻击手段,并进行记录在案,保证了...

    基于ssm+jsp的多角色学生管理系统源码数据库.doc

    5. **异常处理**:系统需具备良好的异常捕获和处理机制,确保运行稳定性。 #### 六、总结 该学生管理系统不仅能够极大地提高学校管理层面对大量数据时的工作效率,还能确保数据的完整性和安全性。通过采用先进的...

    易语言源码QQ登陆器工具.rar

    易语言中可能用到了如SHA1、MD5等哈希算法或RSA非对称加密算法,通过这些算法确保数据在传输过程中的安全性。 再者,用户界面设计也是QQ登陆器工具的重要组成部分。易语言提供了图形用户界面(GUI)的组件库,如...

    易语言源码易语言TNT标尺登录器源码.rar

    源码中可能包含加密算法的实现,比如MD5或更高级的加密方式。 4. **错误处理**:任何软件都可能遇到异常情况,源码中会包含错误处理机制,如网络断开、无效账号等的处理。 5. **日志记录**:为了方便调试和问题...

    易语言一键登录网易邮箱源码.7z

    易语言是一种专为初学者设计的编程语言,它采用了贴近自然语言的语法,使得编程变得更加简单易懂。在这个“易语言一键登录网易邮箱源码”的压缩包中,包含了一个使用易语言编写的程序,该程序旨在帮助用户快速、便捷...

    易语言飘零网络验证版源码.rar

    3. 加密与解密算法:为了保护授权信息的安全,源码中可能会使用加密算法,如MD5、SHA系列、AES等,了解这些算法的原理和使用方式是必要的。 4. 数据库操作:如果系统需要存储和查询用户授权信息,那么数据库操作...

    NetworkDisk 毕业设计网盘系统.zip

    在用户注册与登录环节,应使用加密算法(如MD5或SHA家族)对用户密码进行存储,保证数据安全。此外,文件传输应采用HTTPS协议,确保数据在传输过程中的机密性。对于文件的访问权限,可以设计用户角色和权限系统,如...

Global site tag (gtag.js) - Google Analytics