PHP代码

  1. <?php
  2. //DES加解密工具
  3. class DesEncrypt {
  4. var $key;
  5. var $iv;
  6. function DesEncrypt($key, $iv=0) {
  7. $this->key = $key;
  8. if($iv == 0){
  9. $this->iv = $key;
  10. }else{
  11. $this->iv = $iv;
  12. }
  13. }
  14. function encrypt($input) {
  15. $size = mcrypt_get_block_size('des', 'ecb');
  16. $input = $this->pkcs5_pad($input, $size);
  17. $td = mcrypt_module_open('des', '', 'ecb', '');
  18. $iv = @mcrypt_create_iv (mcrypt_enc_get_iv_size($td), MCRYPT_RAND);
  19. @mcrypt_generic_init($td, $this->key, $iv);
  20. $data = mcrypt_generic($td, $input);
  21. mcrypt_generic_deinit($td);
  22. mcrypt_module_close($td);
  23. $data = base64_encode($data);
  24. return $data;
  25.  
  26. }
  27. function decrypt($encrypted) {
  28. $encrypted = base64_decode($encrypted);
  29. $td = mcrypt_module_open('des','','ecb','');
  30. //使用MCRYPT_DES算法,cbc模式
  31. $iv = @mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND);
  32. $ks = mcrypt_enc_get_key_size($td);
  33. $key = substr($this->key, 0, $ks);
  34. $rs = @mcrypt_generic_init($td, $key, $iv);
  35. //初始处理
  36. $decrypted = mdecrypt_generic($td, $encrypted);
  37. //解密
  38. mcrypt_generic_deinit($td);
  39. //结束
  40. mcrypt_module_close($td);
  41. $y=$this->pkcs5_unpad($decrypted);
  42. return $y;
  43. }
  44. function pkcs5_pad ($text, $blocksize) {
  45. $pad = $blocksize - (strlen($text) % $blocksize);
  46. return $text . str_repeat(chr($pad), $pad);
  47. }
  48. function pkcs5_unpad($text) {
  49. $pad = ord($text{strlen($text)-1});
  50. if ($pad > strlen($text))
  51. return false;
  52. if (strspn($text, chr($pad), strlen($text) - $pad) != $pad)
  53. return false;
  54. return substr($text, 0, -1 * $pad);
  55. }
  56. }
  57.  
  58. $key = "123456789012345678901234567890123456"; //36位
  59. $crypt = new DesEncrypt($key);
  60. $str = "中国";
  61. $mstr = $crypt->encrypt($str);
  62. echo "密文:" . $mstr . "<br/>";
  63.  
  64. $str = $crypt->decrypt($mstr);
  65. echo "明文:" . $str;

结果:

  1. 密文:Rm+8trB4CBQ=
  2. 明文:中国

Java代码

  1. package com.util;
  2. import java.security.Key;
  3. import java.security.SecureRandom;
  4.  
  5. import javax.crypto.Cipher;
  6. import javax.crypto.SecretKeyFactory;
  7. import javax.crypto.spec.DESKeySpec;
  8.  
  9. import org.apache.commons.codec.binary.Base64;
  10.  
  11. import com.util.DesEncrypt;
  12.  
  13. /**
  14. * 加密解密
  15. * @author bian
  16. * 2015 上午11:13:36
  17. */
  18. public class DesEncrypt {
  19. Key key;
  20. public DesEncrypt(String str) {
  21. try{
  22. String key = str;
  23. setKey(key);// 生成密匙
  24. }catch(Exception e){
  25.  
  26. }
  27. }
  28.  
  29. public DesEncrypt() {
  30. setKey("heimazhifuqw233344");
  31. }
  32.  
  33. /**
  34. * 根据参数生成KEY
  35. */
  36. public void setKey(String strKey) {
  37. try {
  38. SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
  39. this.key = keyFactory.generateSecret(new DESKeySpec(strKey.getBytes("UTF8")));
  40. } catch (Exception e) {
  41. throw new RuntimeException(
  42. "Error initializing SqlMap class. Cause: " + e);
  43. }
  44. }
  45.  
  46. /**
  47. * 加密String明文输入,String密文输出
  48. */
  49. public String encrypt(String strMing) {
  50. byte[] byteMi = null;
  51. byte[] byteMing = null;
  52. String strMi = "";
  53. //BASE64Encoder base64en = new BASE64Encoder();
  54. try {
  55. byteMing = strMing.getBytes("UTF8");
  56. byteMi = this.getEncCode(byteMing);
  57. strMi = new String(Base64.encodeBase64(byteMi), "UTF8");
  58. } catch (Exception e) {
  59. throw new RuntimeException(
  60. "Error initializing SqlMap class. Cause: " + e);
  61. } finally {
  62. //base64en = null;
  63. byteMing = null;
  64. byteMi = null;
  65. }
  66. return strMi;
  67. }
  68.  
  69. /**
  70. * 解密 以String密文输入,String明文输出
  71. *
  72. * @param strMi
  73. * @return
  74. */
  75. public String decrypt(String strMi) {
  76. ///BASE64Decoder base64De = new BASE64Decoder();
  77. byte[] byteMing = null;
  78. byte[] byteMi = null;
  79. String strMing = "";
  80. try {
  81. byteMi = Base64.decodeBase64(strMi);
  82. byteMing = this.getDesCode(byteMi);
  83. strMing = new String(byteMing, "UTF8");
  84. } catch (Exception e) {
  85. throw new RuntimeException(
  86. "Error initializing SqlMap class. Cause: " + e);
  87. } finally {
  88. //base64De = null;
  89. byteMing = null;
  90. byteMi = null;
  91. }
  92. return strMing;
  93. }
  94.  
  95. /**
  96. * 加密以byte[]明文输入,byte[]密文输出
  97. *
  98. * @param byteS
  99. * @return
  100. */
  101. private byte[] getEncCode(byte[] byteS) {
  102. byte[] byteFina = null;
  103. Cipher cipher;
  104. try {
  105. cipher = Cipher.getInstance("DES");
  106. cipher.init(Cipher.ENCRYPT_MODE, key,SecureRandom.getInstance("SHA1PRNG"));
  107. byteFina = cipher.doFinal(byteS);
  108. } catch (Exception e) {
  109. throw new RuntimeException(
  110. "Error initializing SqlMap class. Cause: " + e);
  111. } finally {
  112. cipher = null;
  113. }
  114. return byteFina;
  115. }
  116.  
  117. /**
  118. * 解密以byte[]密文输入,以byte[]明文输出
  119. *
  120. * @param byteD
  121. * @return
  122. */
  123. private byte[] getDesCode(byte[] byteD) {
  124. Cipher cipher;
  125. byte[] byteFina = null;
  126. try {
  127. cipher = Cipher.getInstance("DES");
  128. cipher.init(Cipher.DECRYPT_MODE, key,SecureRandom.getInstance("SHA1PRNG"));
  129. byteFina = cipher.doFinal(byteD);
  130. } catch (Exception e) {
  131. throw new RuntimeException(
  132. "Error initializing SqlMap class. Cause: " + e);
  133. } finally {
  134. cipher = null;
  135. }
  136. return byteFina;
  137. }
  138.  
  139. public static void main(String args[]) {
  140. String key = "123456789012345678901234567890123456";//36位
  141. String str = "中国";
  142. DesEncrypt des = new DesEncrypt(key);
  143.  
  144. // DES加密
  145. String mStr = des.encrypt(str);
  146. // DES解密
  147. String deStr = des.decrypt(mStr);
  148.  
  149. System.out.println("密文:" + mStr);
  150. System.out.println("明文:" + deStr);
  151. }
  152. }

结果:

  1. 密文:Rm+8trB4CBQ=
  2. 明文:中国

Java和PHP加解密的更多相关文章

  1. 一个java的DES加解密类转换成C#

    原文:一个java的DES加解密类转换成C# 一个java的des加密解密代码如下: //package com.visionsky.util; import java.security.*; //i ...

  2. java安全与加解密

    1 安全 安全性相关内容分为认证.授权和审计(发现安全问题时可以查看相关历史记录) 用户认证 java API表示主体的是javax.security.auth.Subject类型,表示用户身份标识的 ...

  3. 【转】 Java 进行 RSA 加解密时不得不考虑到的那些事儿

    [转] Java 进行 RSA 加解密时不得不考虑到的那些事儿 1. 加密的系统不要具备解密的功能,否则 RSA 可能不太合适 公钥加密,私钥解密.加密的系统和解密的系统分开部署,加密的系统不应该同时 ...

  4. Java 进行 RSA 加解密时不得不考虑到的那些事儿

    1. 加密的系统不要具备解密的功能,否则 RSA 可能不太合适 公钥加密,私钥解密.加密的系统和解密的系统分开部署,加密的系统不应该同时具备解密的功能,这样即使黑客攻破了加密系统,他拿到的也只是一堆无 ...

  5. Java 实现 AES 加解密

    毕业课题中需要使用加解密算法,要求加解密前后的数据长度不会变化,查了一些资料,发现可以采用AES加密的CFB跟OFB模式是无填充的模式,可以保持加解密前后数据的长度相等.下面上代码: import j ...

  6. RSA 加密 解密 (长字符串) JAVA JS版本加解密

    系统与系统的数据交互中,有些敏感数据是不能直接明文传输的,所以在发送数据之前要进行加密,在接收到数据时进行解密处理:然而由于系统与系统之间的开发语言不同. 本次需求是生成二维码是通过java生成,由p ...

  7. java基础/数据加解密(Mooc)

    一.消息摘要算法 常用摘要算法: 以下 (HEX)内容:bc指Bouncy Castle  |  cc指:Apache commons Codec 1.消息摘要算法MD5及MD族(MD2,MD4) 消 ...

  8. Java RSA 分段加解密

    RSA加解密: 1024位的证书,加密时最大支持117个字节,解密时为128:2048位的证书,加密时最大支持245个字节,解密时为256. 加密时支持的最大字节数:证书位数/8 -11(比如:204 ...

  9. JAVA AES文件加解密

    AES加解密算法,代码如下: /** * Created by hua on 2017/6/30. */ import javax.crypto.Cipher; import javax.crypto ...

随机推荐

  1. hdu 3466 Proud Merchants(有排序的01背包)

    Proud Merchants Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/65536 K (Java/Others) ...

  2. PyTorch之前向传播函数自动调用forward

    参考:1. pytorch学习笔记(九):PyTorch结构介绍 2.pytorch学习笔记(七):pytorch hook 和 关于pytorch backward过程的理解 3.Pytorch入门 ...

  3. 2014年NOIP普及组复赛题解

    题目涉及算法: 珠心算测验:枚举: 比例简化:枚举: 螺旋矩阵:模拟: 子矩阵:状态压缩/枚举/动态规划 珠心算测验 题目链接:https://www.luogu.org/problem/P2141 ...

  4. iptables command 常用命令列表

    命令 -A, --append 范例 iptables -A INPUT ... 说明 新增规则到某个规则链中,该规则将会成为规则链中的最后一条规则. 命令 -D, --delete 范例 iptab ...

  5. Python--day27--内置函数isinstance和issubclass方法

  6. 前端开发之JavaScript

    JavaScript JS是一种脚本语言,浏览器执行,用于渲染HTML网页,实现网页的动画效果. JavaScript的引用方式: 1,在HTML文件中script标签中写JS代码 <scrip ...

  7. Python--day42--MySQL外键定义及创建

    什么是外键? 外键的创建:constraint 外键名 foregin key ("表1值1",“ 表1值2”) references 表2的名字(“值1”)

  8. git 安装及基本配置

    git 基本上来说是开发者必备工具了,在服务器里没有 git 实在不太能说得过去.何况,没有 git 的话,面向github编程 从何说起,如同一个程序员断了左膀右臂. 你对流程熟悉后,只需要一分钟便 ...

  9. 原生js添加鼠标事件的兼容性写法

    兼容pc和移动端,还兼容了surface平板. surface平板特别坑,既可以用鼠标也能用触摸屏,也就是说同时有touch事件和mouse事件. function addEvent(_target, ...

  10. PowerShell 通过 WMI 获取系统安装的驱动

    本文告诉大家如何通过 WMI 获取用户已经安装的驱动程序 通过下面代码可以获取用户已经安装的驱动程序 Get-WmiObject Win32_SystemDriver | Format-List Ca ...