java和php对等的3DES加密算法,ECB的加密模式没有CBC安全,iv是初始向量相当于种子。
参考文章:http://www.cnblogs.com/happyhippy/archive/2006/12/23/601353.html
package org.jamie.demo;
import java.security.NoSuchAlgorithmException;
import java.security.Security;
import java.util.Random;
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESedeKeySpec;
import javax.crypto.spec.IvParameterSpec;
@SuppressWarnings("restriction")
public class TripleDES {
static {
Security.addProvider(new com.sun.crypto.provider.SunJCE());
}
private static final String MCRYPT_TRIPLEDES = "DESede";
private static final String TRANSFORMATION = "DESede/CBC/PKCS5Padding";
public static byte[] decrypt(byte[] data, byte[] key, byte[] iv) throws Exception {
DESedeKeySpec spec = new DESedeKeySpec(key);
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(MCRYPT_TRIPLEDES);
SecretKey sec = keyFactory.generateSecret(spec);
Cipher cipher = Cipher.getInstance(TRANSFORMATION);
IvParameterSpec IvParameters = new IvParameterSpec(iv);
cipher.init(Cipher.DECRYPT_MODE, sec, IvParameters);
return cipher.doFinal(data);
}
public static byte[] encrypt(byte[] data, byte[] key, byte[] iv) throws Exception {
DESedeKeySpec spec = new DESedeKeySpec(key);
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DESede");
SecretKey sec = keyFactory.generateSecret(spec);
Cipher cipher = Cipher.getInstance(TRANSFORMATION);
IvParameterSpec IvParameters = new IvParameterSpec(iv);
cipher.init(Cipher.ENCRYPT_MODE, sec, IvParameters);
return cipher.doFinal(data);
}
public static byte[] generateSecretKey() throws NoSuchAlgorithmException {
KeyGenerator keygen = KeyGenerator.getInstance(MCRYPT_TRIPLEDES);
return keygen.generateKey().getEncoded();
}
public static byte[] randomIVBytes() {
Random ran = new Random();
byte[] bytes = new byte[8];
for (int i = 0; i < bytes.length; ++i) {
bytes[i] = (byte) ran.nextInt(Byte.MAX_VALUE + 1);
}
return bytes;
}
public static void main(String args[]) throws Exception {
String plainText = "a12*&1c中文";
final byte[] secretBytes = TripleDES.generateSecretKey();
final byte[] ivbytes = TripleDES.randomIVBytes();
System.out.println("plain text: " + plainText);
byte[] encrypt = TripleDES.encrypt(plainText.getBytes(), secretBytes, ivbytes);
System.out.println("cipher text: " + encrypt);
System.out.println("decrypt text: " + new String(TripleDES.decrypt(encrypt, secretBytes, ivbytes), "UTF-8"));
}
}
php
<?php
class TripleDES {
public static function genIvParameter() {
return mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_TRIPLEDES,MCRYPT_MODE_CBC), MCRYPT_RAND);
}
private static function pkcs5Pad($text, $blocksize) {
$pad = $blocksize - (strlen($text) % $blocksize); // in php, strlen returns the bytes of $text
return $text . str_repeat(chr($pad), $pad);
}
private static 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);
}
public static function encryptText($plain_text, $key, $iv) {
$padded = TripleDES::pkcs5Pad($plain_text, mcrypt_get_block_size(MCRYPT_TRIPLEDES, MCRYPT_MODE_CBC));
return mcrypt_encrypt(MCRYPT_TRIPLEDES, $key, $padded, MCRYPT_MODE_CBC, $iv);
}
public static function decryptText($cipher_text, $key, $iv) {
$plain_text = mcrypt_decrypt(MCRYPT_TRIPLEDES, $key, $cipher_text, MCRYPT_MODE_CBC, $iv);
return TripleDES::pkcs5Unpad($plain_text);
}
};
/*
function main() {
$iv = TripleDES::genIvParameter();
print "\$iv=$iv\n";
$plain_text="this is a test,包括中文";
$key="ABCDEFGHIJ0123456789ABCD";
$cipher_text = TripleDES::encryptText($plain_text, $key, $iv);
print "\$cipher_text=$cipher_text\n";
$plain_text = TripleDES::decryptText($cipher_text, $key, $iv);
print "\$plain_text=$plain_text\n";
}
main();
*/
?>
分享到:
相关推荐
对等网络中Pastry网络模型的研究 dht概述及其路由算法
UDP协议实现对等通讯Java+RSA加密解密传送信息实现,有client端和server端
一种拓扑感知的流媒体对等网组织算法,传统流媒体传输对等网在应用层构建覆盖图 ( overlay ) , 其逻辑结构可能与网络物理拓扑不匹配, 造成节点接收延迟大, 网 络利用效率不高。 针对此问题, 提出一种拓扑感知的对等网...
基于DPoS算法、P2P对等网络的简易区块链Go语言实现
提出用分布式哈希表(DHT)为每台云服务器产生一个唯一的节点编号, 该编号作为网络拓扑结构、检索信息存储和信息查询共同的标志符, 从而形成一个适合分布式计算的结构化P2P覆盖网。设计了新的拓扑和路由协议来解决云...
针对对等网络中由于负载不均导致的单点失效、网络延迟等问题,提出了一种基于改进蚁群算法的对等网络负载均衡管理模型,介绍了其总体架构,算法实现过程,并通过局部可行化搜索和降阶搜索组成的改进算法来进行信息素的...
为了研究多维属性云资源在云对等网络中快速定位问题,结合云对等网络的优势,提出一种基于云对等网络的多属性云资源的查找算法。在分层云对等网络的基础上,分别利用云资源的类型和属性值建立多维索引。首先根据类型...
基于蚁群优化算法的对等网络路径算法优化研究_谷春英,非常有用的pdf文档!
P2P结构化网络中,各种DHT算法是如何一步步发展来的,以及各种算法的优点与缺点
TDDM信号的非对等广义差分捕获算法.docx
提供加密,解密,生成密钥对等方法。 * 需要到http://www.bouncycastle.org下载bcprov-jdk14-123.jar。 * RSA加密原理概述 * RSA的安全性依赖于大数的分解,公钥和私钥都是两个大素数(大于100的十进制位)的...
提供加密,解密,生成密钥对等方法。js客户端用公钥加密 java服务端servlet堆用私钥解密 完整的代码 直接可以部署运行
在系列研究的基础上,提出了一种复杂路径上任一对等点的数据映射推导算法,在映射推导过程中,根据路径优化策略确定出最优路径,对其进行线性路径数据映射推导,确定该对等点间的映射关系,从而解决了复杂路径上任...
然后深入介绍了目前对等网络几种分布式哈希查找算法Chord、CAN、SkipNet和Cycloid等,并对这些算法从拓扑结构、路由复杂度、路由表大小、容错性、扩展性、负载平衡性等方面进行了评估比较;最后分析了这些算法的优...
利用分布式哈希表(DHT)技术和简单的随机邻居策略,提出了一种基于云对等网络的资源搜索算法(RCLOUD),解决了以1-c的概率在d跳内完成查询的问题,c 和d均为可设定的常数。该算法的一个主要优势是当节点加入或离开...
二、语言环境:Java 三、已知技术参数和设计要求: 1、实现一个图形用户界面局域网内的消息系统。 2、功能:建立一个局域网内的简单的P2P消息系统,程序既是服务器又是客户,服务器端口使用3000。 3、用户注册及对等...
计算机原理与应用,组建对等网实验报告!
这样,远程方法激活可以发生在对等的两端,也可以发生在客户端和服务器之间,只要双方的应用程序都是用Java写的。 4、Java IDL(Java Interface Definition Language) 提供与CORBA(Common Object Request Broker ...
对等网络(P2P)中 CAN 算法研究.doc
Chord算法在对等网络中的应用研究,Chord算法在对等网络中的应用研究。