java c des ecb_PHP、Java的Des加密(ECB mode)
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)相关推荐
- DES算法Java实现(完善版)
一.密钥长度处理 实现了小于8 bytes的密钥都可以进行测试,原理其实很简单,只需要在密钥生成的时候对密钥的长度进行判断,不够的进行补0操作. //密钥生成public StringBuffer[] ...
- Java开发必须掌握的5种加密策略
转载自 Java开发必须掌握的5种加密策略 本文总结自<大型电商分布式系统实践--第四课>.文末给出获取全套PPT及视频的方式. 一.数字摘要 数字摘要也称为消息摘要,它是一个唯一对应一个 ...
- java加密算法入门(三)-非对称加密详解
1.简单介绍 这几天一直在看非对称的加密,相比之前的两篇内容,这次看了两倍多的时间还云里雾里的,所以这篇文章相对之前的两篇,概念性的东西多了些,另外是代码的每一步我都做了介绍,方便自己以后翻阅,也方便 ...
- Android DES,AES,RSA加密实现
DES加密: DES 使用一个 56 位的密钥以及附加的 8 位奇偶校验位(每组的第8位作为奇偶校验位),产生最大 64 位的分组大小.这是一个迭代的分组密码,使用称为 Feistel 的技术,其中将 ...
- JAVA 3DES加密 ECB模式 ZeroPadding填充
3DES ECB ZeroPadding 前言 解决 相关类 前言 因金融机构支付相关的接口需要对敏感数据加密,采用3DES加密.刚开始以为这个加密网上找一大堆,没想到一无所获. 解决 由于不熟悉这个 ...
- Java 实现RSA 签名/验签与加密解密
文章目录 一.前言 二.签名与验签 1.程序代码如下: 2.程序运行结果: 三.加密解密 1.添加加解密方法 2.程序运行结果 一.前言 RSA 算法相比于AES算法不同的是RSA的秘钥为不同的两个一 ...
- java 基于口令加密算法,Java安全编程:基于口令加密(PBE)
安全 PBE 在之前的文章中曾讲到过DES加密算法,类似这种加密算法都有一个密钥,密钥的长度决定了加密的安全性,但是这种密钥比较难记忆,是需要存储的. PBE算法是一种基于口令的加密算法,它并不是构建 ...
- Java实现MD5(32/16位大小写)加密
MD5简单介绍 大家都知道,地球上任何人都有自己独一无二的指纹,这常常成为公安机关鉴别罪犯身份最值得信赖的方法:与之类似,MD5就可以为任何文件(不管其大小.格式.数量)产生一个同样独一无二的&quo ...
- python des解密_python实现DES加密解密方法实例详解
本文实例讲述了python实现DES加密解密方法.分享给大家供大家参考.具体分析如下: 实现功能:加密中文等字符串 密钥与明文可以不等长 这里只贴代码,加密过程可以自己百度,此处python代码没有优 ...
最新文章
- 一键编译php,编译安装php 附加一键安装php5.6.30脚本
- WSL+VSCODE体验UBUNTU环境下的开发
- android menuitem 字体颜色,安卓更改Menu的字体颜色(使用actionLayout,适用于多个fragment)...
- [bzoj 1452] [JSOI2009]Count
- 高并发大容量 NoSQL 解决方案探索
- React router 路由 入门安装
- 转账引发数据一致性思考
- 【用python写一个简易的消息轰炸代码】
- 关于chrome浏览器不能正常访问百度的解决方法
- 想跟应届毕业生聊聊的三个话题
- CSS3变形和动画:旋转、扭曲、缩放、位移、矩阵 、原点 transform-origin、过渡属性 transition-property、过渡所需时间 transition-duration...
- Tessellation on Any Budget
- 1、编写一个程序,将一个小写字母(如a)转换成相应的大写字母并显示输出。
- 打印机文件里没有服务器属性,win7没有打印机服务器属性设置
- Echarts之圆饼图用法
- 基于ICE方式SIP信令穿透Symmetric NAT技术研究
- postgresql存储过程基本语法
- 2021湖湘杯wp_web
- 如何提升软件测试回归测试,如何更高效的进行软件回归测试?
- 哪个选项对python文件操作的描述是错误的_Python 中对变量描述错误的选项是
热门文章
- poi导出excel 损坏_Java使用POI生成Excel文件后打不开的问题
- DeprecationWarning: Seeding based on hashing is deprecated since Python 3.9
- Windows10怎么设置双屏?双屏显示设置有哪些?
- AutoJs学习-读写手机联系人
- 车用计算机电路板,使用车充、LED头灯电路板制作1.5V电源模块(可代替1号电池)...
- 基于遥感影像的变化检测数据集
- 老友记台词中英文对照Part1
- java实现网上招标系统
- java 最后的异常_关于java:异常处理尝试没有catch,但最后
- type-c英文怎么读音发音,type-c怎么读英语发音