PHP 和 Java �g用 Des 加密(ECB mode) ��鬏��Y料,要�_保�蛇�用同�拥�key加解密的�Y果一�印�

PHP code:

/**

* DES 加解密(ECB mode)

*/

class DesCrypt {

private $key;

/**

* DES 加解密(ECB mode)

* @param string $key 加密的key

*/

public function __construct($key) {

$this->key = $key;

}

/**

* 加密(ECB mode)

* @param string $str 要加密的�Y料

* @return string

* @throws \Exception

*/

public function encrypt($str) {

//�@得加密算法的分�M大小

$size = mcrypt_get_block_size('des', 'ecb');

//填充不足字��担��魅����L度必�是 n * 分�M大小

$str = $this->pkcs5Pad($str, $size);

$key = $this->key;

//打�_算法和模�M���的模�K

$td = mcrypt_module_open('des', '', 'ecb', '');

$key_max_len = mcrypt_enc_get_key_size($td);

if (strlen($key) > $key_max_len) {

throw new \Exception("key超�^最大�L度:{$key_max_len}");

}

//建立初始向量

$iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND);

//初始化加密所需的��n�^

//在 ECB 模式下,初始向量��被忽略, 在 CFB,CBC,STREAM,nOFB 和 OFB 模式下,必�提供初始向量

mcrypt_generic_init($td, $key, $iv);

//加密���

$data = mcrypt_generic($td, $str);

//清理指定加密模�M��n�^

mcrypt_generic_deinit($td);

//�P�]加密模�M

mcrypt_module_close($td);

//�⒓用芙Y果用base64��a

$data = base64_encode($data);

return $data;

}

/**

* 解密(ECB mode)

* @param string $str 要解密的密文

* @return string

* @throws \Exception

*/

public function decrypt($str) {

//��base64��a�Y果解�_

$str = base64_decode($str);

$key = $this->key;

//�@得加密算法的分�M大小

$td = mcrypt_module_open('des', '', 'ecb', '');

$key_max_len = mcrypt_enc_get_key_size($td);

if (strlen($key) > $key_max_len) {

throw new \Exception("key超�^最大�L度:{$key_max_len}");

}

//建立初始向量

$iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND);

//$ks = mcrypt_enc_get_key_size($td);

//初始化加密所需的��n�^

mcrypt_generic_init($td, $key, $iv);

//解密���

$decrypted = mdecrypt_generic($td, $str);

//清理指定加密模�M��n�^

mcrypt_generic_deinit($td);

//�P�]加密模�M

mcrypt_module_close($td);

//去除 pkcs5Pad 的填充值

$result = $this->pkcs5Unpad($decrypted);

return $result;

}

/**

* 填充不足字���

* 1.�⑻畛淞咳�chr��填充值

* 2.��好�M也再填充一�M

* @param string $text

* @param int $blocksize

* @return string

*/

private function pkcs5Pad($text, $blocksize) {

$pad = $blocksize - (strlen($text) % $blocksize);

return $text . str_repeat(chr($pad), $pad);

}

/**

* 去除 pkcs5Pad 的填充值

* @param string $text

* @return boolean

* @return string

*/

private function pkcs5Unpad($text) {

$pad = ord($text{strlen($text) - 1});

if ($pad > strlen($text)) {

return false;

}

if (strspn($text, chr($pad), strlen($text) - $pad) != $pad) {

return false;

}

return substr($text, 0, -1 * $pad);

}

}

$Des = new DesCrypt("12345678");

$encrypt_res = $Des->encrypt("test data"); //l9TN9Ln/71IvFRjlhD8PaQ==

$Des->decrypt($encrypt_res); //test data

�]:PHP要�_定有�b php-mcrypt

$ yum install php-mcrypt

Java Code:

import javax.crypto.*;

import java.security.*;

import javax.crypto.spec.*;

/**

* DES算法

*

* @author user

*/

public class DES {

/**

* 加密函��

*

* @param data 加密���

* @param key 密�

* @return 返回加密後的���

*/

public static byte[] encrypt(byte[] data, byte[] key) {

try {

// DES算法要求有一��可信任的�S�C�翟�

SecureRandom sr = new SecureRandom();

// �脑�始密������建DESKeySpec�ο�

DESKeySpec dks = new DESKeySpec(key);

// ��建一��密匙工�S,然後用它把DESKeySpec�D�Q成

// 一��SecretKey�ο�

SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");

SecretKey secretKey = keyFactory.generateSecret(dks);

// using DES in ECB mode

Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");

// 用密匙初始化Cipher�ο�

cipher.init(Cipher.ENCRYPT_MODE, secretKey, sr);

// �绦屑用懿僮�

byte encryptedData[] = cipher.doFinal(data);

return encryptedData;

} catch (Exception e) {

System.err.println("DES算法,加密���出�e!");

e.printStackTrace();

}

return null;

}

/**

* 解密函��

*

* @param data 解密���

* @param key 密�

* @return 返回解密後的���

*/

public static byte[] decrypt(byte[] data, byte[] key) {

try {

// DES算法要求有一��可信任的�S�C�翟�

SecureRandom sr = new SecureRandom();

// byte rawKeyData[] = /* 用某�N方法�@取原始密匙��� */;

// �脑�始密匙�����建一��DESKeySpec�ο�

DESKeySpec dks = new DESKeySpec(key);

// ��建一��密匙工�S,然後用它把DESKeySpec�ο筠D�Q成

// 一��SecretKey�ο�

SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");

SecretKey secretKey = keyFactory.generateSecret(dks);

// using DES in ECB mode

Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");

// 用密匙初始化Cipher�ο�

cipher.init(Cipher.DECRYPT_MODE, secretKey, sr);

// 正式�绦薪饷懿僮�

byte decryptedData[] = cipher.doFinal(data);

return decryptedData;

} catch (Exception e) {

System.err.println("DES算法,解密出�e。");

e.printStackTrace();

}

return null;

}

}

import javax.xml.bind.*;

public class desTest {

public static void main(String[] args) {

String key = "12345678"; //�O定加密 key

String plain = "test data";//加密�热菝魑�

byte[] key_byte = key.getBytes();

byte[] plain_byte = plain.getBytes();

//ECB mode 加密

byte[] data_ecb = DES.encrypt(plain_byte, key_byte);

//加密�Y果�BASE64��a

String base64String = DatatypeConverter.printBase64Binary(data_ecb);

System.out.println("ECB密文��^BASE64��a:" + base64String);

try {

byte[] b = DatatypeConverter.parseBase64Binary(base64String);

System.out.println("ECB解密後明文:" + new String(DES.decrypt(b, key_byte)));

} catch (Exception ex) {

System.out.println(ex.getMessage());

System.out.println(ex.toString());

}

}

}

//�出

ECB密文��^BASE64��a:l9TN9Ln/71IvFRjlhD8PaQ==

ECB解密後明文:test data

�⒖肌⒐��:

java c des ecb_PHP、Java的Des加密(ECB mode)相关推荐

  1. DES算法Java实现(完善版)

    一.密钥长度处理 实现了小于8 bytes的密钥都可以进行测试,原理其实很简单,只需要在密钥生成的时候对密钥的长度进行判断,不够的进行补0操作. //密钥生成public StringBuffer[] ...

  2. Java开发必须掌握的5种加密策略

    转载自 Java开发必须掌握的5种加密策略 本文总结自<大型电商分布式系统实践--第四课>.文末给出获取全套PPT及视频的方式. 一.数字摘要 数字摘要也称为消息摘要,它是一个唯一对应一个 ...

  3. java加密算法入门(三)-非对称加密详解

    1.简单介绍 这几天一直在看非对称的加密,相比之前的两篇内容,这次看了两倍多的时间还云里雾里的,所以这篇文章相对之前的两篇,概念性的东西多了些,另外是代码的每一步我都做了介绍,方便自己以后翻阅,也方便 ...

  4. Android DES,AES,RSA加密实现

    DES加密: DES 使用一个 56 位的密钥以及附加的 8 位奇偶校验位(每组的第8位作为奇偶校验位),产生最大 64 位的分组大小.这是一个迭代的分组密码,使用称为 Feistel 的技术,其中将 ...

  5. JAVA 3DES加密 ECB模式 ZeroPadding填充

    3DES ECB ZeroPadding 前言 解决 相关类 前言 因金融机构支付相关的接口需要对敏感数据加密,采用3DES加密.刚开始以为这个加密网上找一大堆,没想到一无所获. 解决 由于不熟悉这个 ...

  6. Java 实现RSA 签名/验签与加密解密

    文章目录 一.前言 二.签名与验签 1.程序代码如下: 2.程序运行结果: 三.加密解密 1.添加加解密方法 2.程序运行结果 一.前言 RSA 算法相比于AES算法不同的是RSA的秘钥为不同的两个一 ...

  7. java 基于口令加密算法,Java安全编程:基于口令加密(PBE)

    安全 PBE 在之前的文章中曾讲到过DES加密算法,类似这种加密算法都有一个密钥,密钥的长度决定了加密的安全性,但是这种密钥比较难记忆,是需要存储的. PBE算法是一种基于口令的加密算法,它并不是构建 ...

  8. Java实现MD5(32/16位大小写)加密

    MD5简单介绍 大家都知道,地球上任何人都有自己独一无二的指纹,这常常成为公安机关鉴别罪犯身份最值得信赖的方法:与之类似,MD5就可以为任何文件(不管其大小.格式.数量)产生一个同样独一无二的&quo ...

  9. python des解密_python实现DES加密解密方法实例详解

    本文实例讲述了python实现DES加密解密方法.分享给大家供大家参考.具体分析如下: 实现功能:加密中文等字符串 密钥与明文可以不等长 这里只贴代码,加密过程可以自己百度,此处python代码没有优 ...

最新文章

  1. 一键编译php,编译安装php 附加一键安装php5.6.30脚本
  2. WSL+VSCODE体验UBUNTU环境下的开发
  3. android menuitem 字体颜色,安卓更改Menu的字体颜色(使用actionLayout,适用于多个fragment)...
  4. [bzoj 1452] [JSOI2009]Count
  5. 高并发大容量 NoSQL 解决方案探索
  6. React router 路由 入门安装
  7. 转账引发数据一致性思考
  8. 【用python写一个简易的消息轰炸代码】
  9. 关于chrome浏览器不能正常访问百度的解决方法
  10. 想跟应届毕业生聊聊的三个话题
  11. CSS3变形和动画:旋转、扭曲、缩放、位移、矩阵 、原点 transform-origin、过渡属性 transition-property、过渡所需时间 transition-duration...
  12. Tessellation on Any Budget
  13. 1、编写一个程序,将一个小写字母(如a)转换成相应的大写字母并显示输出。
  14. 打印机文件里没有服务器属性,win7没有打印机服务器属性设置
  15. Echarts之圆饼图用法
  16. 基于ICE方式SIP信令穿透Symmetric NAT技术研究
  17. postgresql存储过程基本语法
  18. 2021湖湘杯wp_web
  19. 如何提升软件测试回归测试,如何更高效的进行软件回归测试?
  20. 哪个选项对python文件操作的描述是错误的_Python 中对变量描述错误的选项是

热门文章

  1. poi导出excel 损坏_Java使用POI生成Excel文件后打不开的问题
  2. DeprecationWarning: Seeding based on hashing is deprecated since Python 3.9
  3. Windows10怎么设置双屏?双屏显示设置有哪些?
  4. AutoJs学习-读写手机联系人
  5. 车用计算机电路板,使用车充、LED头灯电路板制作1.5V电源模块(可代替1号电池)...
  6. 基于遥感影像的变化检测数据集
  7. 老友记台词中英文对照Part1
  8. java实现网上招标系统
  9. java 最后的异常_关于java:异常处理尝试没有catch,但最后
  10. type-c英文怎么读音发音,type-c怎么读英语发音