兼容PHP和Java的des加密解密代码分享
2023-06-13 09:15:32 时间
php代码:
<?php classDES { var$key; var$iv;//偏移量 functionDES($key,$iv=0) { $this->key=$key; if($iv==0) { $this->iv=$key; } else { $this->iv=$iv; } } //加密 functionencrypt($str) { $size=mcrypt_get_block_size(MCRYPT_DES,MCRYPT_MODE_CBC); $str=$this->pkcs5Pad($str,$size); $data=mcrypt_cbc(MCRYPT_DES,$this->key,$str,MCRYPT_ENCRYPT,$this->iv); //$data=strtoupper(bin2hex($data));//返回大写十六进制字符串 returnbase64_encode($data); } //解密 functiondecrypt($str) { $str=base64_decode($str); //$strBin=$this->hex2bin(strtolower($str)); $str=mcrypt_cbc(MCRYPT_DES,$this->key,$str,MCRYPT_DECRYPT,$this->iv); $str=$this->pkcs5Unpad($str); return$str; } functionhex2bin($hexData) { $binData=""; for($i=0;$i<strlen($hexData);$i+=2) { $binData.=chr(hexdec(substr($hexData,$i,2))); } return$binData; } functionpkcs5Pad($text,$blocksize) { $pad=$blocksize-(strlen($text)%$blocksize); return$text.str_repeat(chr($pad),$pad); } functionpkcs5Unpad($text) { $pad=ord($text{strlen($text)-1}); if($pad>strlen($text)) returnfalse; if(strspn($text,chr($pad),strlen($text)-$pad)!=$pad) returnfalse; returnsubstr($text,0,-1*$pad); } } $str="abcd"; $key="asdfwef5"; $crypt=newDES($key); $mstr=$crypt->encrypt($str); $str=$crypt->decrypt($mstr); echo$str."<=>".$mstr; ?>
java代码:
packagecom.test; importit.sauronsoftware.base64.Base64; importjava.security.Key; importjava.security.SecureRandom; importjava.security.spec.AlgorithmParameterSpec; importjavax.crypto.Cipher; importjavax.crypto.SecretKeyFactory; importjavax.crypto.spec.DESKeySpec; importjavax.crypto.spec.IvParameterSpec; publicclassMain { publicstaticfinalStringALGORITHM_DES="DES/CBC/PKCS5Padding"; /** *DES算法,加密 * *@paramdata待加密字符串 *@paramkey加密私钥,长度不能够小于8位 *@return加密后的字节数组,一般结合Base64编码使用 *@throwsCryptException异常 */ publicstaticStringencode(Stringkey,Stringdata)throwsException { returnencode(key,data.getBytes()); } /** *DES算法,加密 * *@paramdata待加密字符串 *@paramkey加密私钥,长度不能够小于8位 *@return加密后的字节数组,一般结合Base64编码使用 *@throwsCryptException异常 */ publicstaticStringencode(Stringkey,byte[]data)throwsException { try { DESKeySpecdks=newDESKeySpec(key.getBytes()); SecretKeyFactorykeyFactory=SecretKeyFactory.getInstance("DES"); //key的长度不能够小于8位字节 KeysecretKey=keyFactory.generateSecret(dks); Ciphercipher=Cipher.getInstance(ALGORITHM_DES); IvParameterSpeciv=newIvParameterSpec(key.getBytes()); AlgorithmParameterSpecparamSpec=iv; cipher.init(Cipher.ENCRYPT_MODE,secretKey,paramSpec); byte[]bytes=cipher.doFinal(data); //returnbyte2hex(bytes); returnnewString(Base64.encode(bytes)); }catch(Exceptione) { thrownewException(e); } } /** *DES算法,解密 * *@paramdata待解密字符串 *@paramkey解密私钥,长度不能够小于8位 *@return解密后的字节数组 *@throwsException异常 */ publicstaticbyte[]decode(Stringkey,byte[]data)throwsException { try { SecureRandomsr=newSecureRandom(); DESKeySpecdks=newDESKeySpec(key.getBytes()); SecretKeyFactorykeyFactory=SecretKeyFactory.getInstance("DES"); //key的长度不能够小于8位字节 KeysecretKey=keyFactory.generateSecret(dks); Ciphercipher=Cipher.getInstance(ALGORITHM_DES); IvParameterSpeciv=newIvParameterSpec(key.getBytes()); AlgorithmParameterSpecparamSpec=iv; cipher.init(Cipher.DECRYPT_MODE,secretKey,paramSpec); returncipher.doFinal(data); }catch(Exceptione) { thrownewException(e); } } /** *获取编码后的值 *@paramkey *@paramdata *@return *@throwsException */ publicstaticStringdecodeValue(Stringkey,Stringdata) { byte[]datas; Stringvalue=null; try{ datas=decode(key,Base64.decode(data.getBytes())); value=newString(datas); }catch(Exceptione){ value=""; } returnvalue; } publicstaticvoidmain(String[]args)throwsException { System.out.println("明:abcd;密:"+Main.encode("asdfwef5","abcd")); } }
相关文章
- java jce_了解Java JCE的加密
- java语言的平台无关性是指什么,《深入Java虚拟机》学习笔记二:平台无关性
- Java XLSTransformer生成excel文件
- 【说站】java多态的好处
- 面试:你知道Java性能优化有哪些手段?
- java url加密_Java实现url加密处理的方法示例
- php代码混淆加密算法_java代码混淆加密
- ORM哪家强?java,c#,php,python,go 逐一对比, 网友直呼:全面客观
- 【Android 安全】DEX 加密 ( Java 工具开发 | 加密解密算法 API | 编译代理 Application 依赖库 | 解压依赖库 aar 文件 )
- java操作文件FileUtil文件相关的工具类常用方法详解编程语言
- PHP连接MySQL的实现方法(php怎么连接mysql)
- Java数据持久层框架 MyBatis之API学习五(Mapper XML 文件)详解编程语言
- Java枚举(Enum)类型的研究与应用详解编程语言
- 数据库远程连接MySQL数据库:利用PHP实现简易方法(php远程mysql)
- 进程比较Java与Linux进程的异同(java进程linux)
- Oracle 宣布 Java 7 生命周期终结
- Linux系统如何实现PHP开机自启动?(linux开机启动php)
- PHP连接Oracle:轻松实现数据库交互(php链接oracle)
- Java与Linux:前景迷人的新科技(java和linux前景)
- PHP如何访问MS SQL服务器(php怎么访问mssql)
- Java程序调用Linux系统命令实现更多功能(java调用linux命令)
- PHP字符转义相关函数小结(php下的转义字符串)
- PHP和Mysqlweb应用开发核心技术第1部分Php基础-1开始了解php
- php另类上传图片的方法(PHP用Socket上传图片)
- java中的移位运算符心得总结