跟人合作搞个android app,我负责服务器端 用的是php,
手机端和服务器端之间的数据传输有加密,
他手机端用的是这个java的数据加密类,
求相对应的php版本 数据加密类。
package com.ssh.util;import java.io.bufferedoutputstream;import java.io.fileoutputstream;import java.security.key;import javax.crypto.cipher;import javax.crypto.keygenerator;import javax.crypto.secretkey;import javax.crypto.secretkeyfactory;import javax.crypto.spec.desedekeyspec;import com.sun.org.apache.xerces.internal.impl.dv.util.base64;/** * desede对称加密算法演示 * * @author zolly * */public class desedecoder { /** * 密钥算法 * */ public static final string key_algorithm = desede; /** * 加密/解密算法/工作模式/填充方式 * */ public static final string cipher_algorithm = desede/ecb/pkcs5padding; /** * * 生成密钥 * * @return byte[] 二进制密钥 * */ public static byte[] initkey() throws exception { // 实例化密钥生成器 keygenerator kg = keygenerator.getinstance(key_algorithm); // 初始化密钥生成器 kg.init(168); // 生成密钥 secretkey secretkey = kg.generatekey(); // 获取二进制密钥编码形式 byte[] key = secretkey.getencoded(); bufferedoutputstream keystream = new bufferedoutputstream(new fileoutputstream(desedekey.dat)); keystream.write(key, 0, key.length); keystream.flush(); keystream.close(); return key; } /** * 转换密钥 * * @param key * 二进制密钥 * @return key 密钥 * */ public static key tokey(byte[] key) throws exception { // 实例化des密钥 desedekeyspec dks = new desedekeyspec(key); // 实例化密钥工厂 secretkeyfactory keyfactory = secretkeyfactory .getinstance(key_algorithm); // 生成密钥 secretkey secretkey = keyfactory.generatesecret(dks); return secretkey; } /** * 加密数据 * * @param data * 待加密数据 * @param key * 密钥 * @return byte[] 加密后的数据 * */ public static byte[] encrypt(byte[] data, byte[] key) throws exception { // 还原密钥 key k = tokey(key); // 实例化 cipher cipher = cipher.getinstance(cipher_algorithm); // 初始化,设置为加密模式 cipher.init(cipher.encrypt_mode, k); // 执行操作 return cipher.dofinal(data); } /** * 解密数据 * * @param data * 待解密数据 * @param key * 密钥 * @return byte[] 解密后的数据 * */ public static byte[] decrypt(byte[] data, byte[] key) throws exception { // 欢迎密钥 key k = tokey(key); // 实例化 cipher cipher = cipher.getinstance(cipher_algorithm); // 初始化,设置为解密模式 cipher.init(cipher.decrypt_mode, k); // 执行操作 return cipher.dofinal(data); } /** * 加密字符串 * @param data * @return */ public static string encode(string str,string screatkey){ string result = ; byte[] data = desedecoder.encrypt(str.getbytes(), screatkey.getbytes()); result = base64.encode(data); return result; } /** * 解密字符串 * @param str * @return */ public static string decode(string str,string screatkey){ string result = ; try { byte[] data = base64.decode(str); data = desedecoder.decrypt(data, screatkey.getbytes()); result = new string(data); } catch (exception e) { e.printstacktrace(); } return result; } /** * 进行加解密的测试 * * @throws exception */ public static void main(string[] args) throws exception { string key = 2c7ddyby20mmky3391xivikz; string str = hello world~; system.out.println(key:+key); system.out.println(原文: + str); //加密 string value = encode(str,key); system.out.println(加密后: + value); system.out.println(解密后: + decode(value,key)); }}
回复内容: 跟人合作搞个android app,我负责服务器端 用的是php,
手机端和服务器端之间的数据传输有加密,
他手机端用的是这个java的数据加密类,
求相对应的php版本 数据加密类。
package com.ssh.util;import java.io.bufferedoutputstream;import java.io.fileoutputstream;import java.security.key;import javax.crypto.cipher;import javax.crypto.keygenerator;import javax.crypto.secretkey;import javax.crypto.secretkeyfactory;import javax.crypto.spec.desedekeyspec;import com.sun.org.apache.xerces.internal.impl.dv.util.base64;/** * desede对称加密算法演示 * * @author zolly * */public class desedecoder { /** * 密钥算法 * */ public static final string key_algorithm = desede; /** * 加密/解密算法/工作模式/填充方式 * */ public static final string cipher_algorithm = desede/ecb/pkcs5padding; /** * * 生成密钥 * * @return byte[] 二进制密钥 * */ public static byte[] initkey() throws exception { // 实例化密钥生成器 keygenerator kg = keygenerator.getinstance(key_algorithm); // 初始化密钥生成器 kg.init(168); // 生成密钥 secretkey secretkey = kg.generatekey(); // 获取二进制密钥编码形式 byte[] key = secretkey.getencoded(); bufferedoutputstream keystream = new bufferedoutputstream(new fileoutputstream(desedekey.dat)); keystream.write(key, 0, key.length); keystream.flush(); keystream.close(); return key; } /** * 转换密钥 * * @param key * 二进制密钥 * @return key 密钥 * */ public static key tokey(byte[] key) throws exception { // 实例化des密钥 desedekeyspec dks = new desedekeyspec(key); // 实例化密钥工厂 secretkeyfactory keyfactory = secretkeyfactory .getinstance(key_algorithm); // 生成密钥 secretkey secretkey = keyfactory.generatesecret(dks); return secretkey; } /** * 加密数据 * * @param data * 待加密数据 * @param key * 密钥 * @return byte[] 加密后的数据 * */ public static byte[] encrypt(byte[] data, byte[] key) throws exception { // 还原密钥 key k = tokey(key); // 实例化 cipher cipher = cipher.getinstance(cipher_algorithm); // 初始化,设置为加密模式 cipher.init(cipher.encrypt_mode, k); // 执行操作 return cipher.dofinal(data); } /** * 解密数据 * * @param data * 待解密数据 * @param key * 密钥 * @return byte[] 解密后的数据 * */ public static byte[] decrypt(byte[] data, byte[] key) throws exception { // 欢迎密钥 key k = tokey(key); // 实例化 cipher cipher = cipher.getinstance(cipher_algorithm); // 初始化,设置为解密模式 cipher.init(cipher.decrypt_mode, k); // 执行操作 return cipher.dofinal(data); } /** * 加密字符串 * @param data * @return */ public static string encode(string str,string screatkey){ string result = ; byte[] data = desedecoder.encrypt(str.getbytes(), screatkey.getbytes()); result = base64.encode(data); return result; } /** * 解密字符串 * @param str * @return */ public static string decode(string str,string screatkey){ string result = ; try { byte[] data = base64.decode(str); data = desedecoder.decrypt(data, screatkey.getbytes()); result = new string(data); } catch (exception e) { e.printstacktrace(); } return result; } /** * 进行加解密的测试 * * @throws exception */ public static void main(string[] args) throws exception { string key = 2c7ddyby20mmky3391xivikz; string str = hello world~; system.out.println(key:+key); system.out.println(原文: + str); //加密 string value = encode(str,key); system.out.println(加密后: + value); system.out.println(解密后: + decode(value,key)); }}
还是靠自己比较靠谱。。。
/** * desede 数据加密解密类 * * @author thisky@qq.com */class desedecoder { public static function encrypt($str, $key) { $td = self::gettd($key); $ret = base64_encode(mcrypt_generic($td, self::pkcs5_pad($str, 8))); mcrypt_generic_deinit($td); mcrypt_module_close($td); return $ret; } public static function decrypt($str, $key) { $td = self::gettd($key); $ret = self::pkcs5_unpad(mdecrypt_generic($td, base64_decode($str))); mcrypt_generic_deinit($td); mcrypt_module_close($td); return $ret; } private static function pkcs5_pad($text, $blocksize) { $pad = $blocksize - (strlen($text) % $blocksize); return $text . str_repeat(chr($pad), $pad); } private static function pkcs5_unpad($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); } private static function getiv() { return pack('h16', '0102030405060708'); } private static function gettd($key) { $iv = self::getiv(); $td = mcrypt_module_open(mcrypt_3des, '', mcrypt_mode_ecb, ''); mcrypt_generic_init($td, $key, $iv); return $td; }}
aes(字数补丁)
在吗!我遇到同样的问题!求帮助!