PHP,java跨平台AES加密代码
2014-06-20 16:34
441 查看
参考部分网上代码整所得
java代码
--------------------------start---------------------------------------
package com.sql8.net.util;
import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import sun.misc.BASE64Decoder;
public class Encryption {
private static final String KEY_ALGORITHM = "AES";
private static final String DEFAULT_CIPHER_ALGORITHM = "AES/CBC/NoPadding";
public static void main(String args[]) throws Exception {
String data = "Test String";
String key = "f";
System.out.println(encrypt(data, key));
System.out.println(desEncrypt(encrypt(data, key), key));
}
/**
* 产生一个16位的密码 不足16位在其前面补0 超过16位取期最后16位
*
* @param key
* @return
* @author yangxiaoyong
* @version 创建时间:2014年6月20日 下午3:31:30 参考 www.sql8.net
*/
private static String createKey(String key) {
int num=16;
if (key == null)
key = "sql8.net";
key = key.trim();
int length = key.length();
if (length < num) {
for (int i = 0; i < num - length; i++) {
key = "0" + key;
}
}
if (length > num) {
String k = key.substring(length - num, length);
key = k;
}
return key;
}
/**编码
* @param data
* @param key
* @return
* @throws Exception
* @author yangxiaoyong
* @version 创建时间:2014年6月20日 下午3:49:19
* 参考 www.sql8.net
*/
public static String encrypt(String data, String key) throws Exception {
try {
key = createKey(key);
String iv = key;
Cipher cipher = Cipher.getInstance(DEFAULT_CIPHER_ALGORITHM);
int blockSize = cipher.getBlockSize();
byte[] dataBytes = data.getBytes();
int plaintextLength = dataBytes.length;
if (plaintextLength % blockSize != 0) {
plaintextLength = plaintextLength + (blockSize - (plaintextLength % blockSize));
}
byte[] plaintext = new byte[plaintextLength];
System.arraycopy(dataBytes, 0, plaintext, 0, dataBytes.length);
SecretKeySpec keyspec = new SecretKeySpec(key.getBytes(), KEY_ALGORITHM);
IvParameterSpec ivspec = new IvParameterSpec(iv.getBytes());
cipher.init(Cipher.ENCRYPT_MODE, keyspec, ivspec);
byte[] encrypted = cipher.doFinal(plaintext);
return new sun.misc.BASE64Encoder().encode(encrypted);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
/**解码
* @param data
* @param key
* @return
* @throws Exception
* @author yangxiaoyong
* @version 创建时间:2014年6月20日 下午3:49:04
* 参考 www.sql8.net
*/
public static String desEncrypt(String data, String key) throws Exception {
try {
key = createKey(key);
String iv = key;
byte[] encrypted1 = new BASE64Decoder().decodeBuffer(data);
Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding");
SecretKeySpec keyspec = new SecretKeySpec(key.getBytes(), "AES");
IvParameterSpec ivspec = new IvParameterSpec(iv.getBytes());
cipher.init(Cipher.DECRYPT_MODE, keyspec, ivspec);
byte[] original = cipher.doFinal(encrypted1);
String originalString = new String(original);
return originalString;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
/**将byte转成String
* @param data
* @return
* @author yangxiaoyong
* @version 创建时间:2014年6月20日 下午3:48:29
* 参考 www.sql8.net
*/
private static String showByteArray(byte[] data) {
if (null == data) {
return null;
}
StringBuilder sb = new StringBuilder("{");
for (byte b : data) {
sb.append(b).append(",");
}
sb.deleteCharAt(sb.length() - 1);
sb.append("}");
return sb.toString();
}
}
--------------------------end----------------------------------
php代码
--------------------start------------------------------------------
<?php
$key = "f";
$data= "Test String";
$key=createKey($key);
//加密
$encrypted = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $data, MCRYPT_MODE_CBC, $key);
echo(base64_encode($encrypted));
echo '<br/>';
//解密
$encryptedData = base64_decode(base64_encode($encrypted));
$decrypted = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, $encryptedData, MCRYPT_MODE_CBC, $key);
echo($decrypted);
echo("<br/>");
/**
* 产生一个16位的密码 不足16位在其前面补0 超过16位取期最后16位
*
* @param key
* @return
* @author yangxiaoyong
* @version 创建时间:2014年6月20日 下午3:31:30 参考 www.sql8.net
*/
function createKey($key)
{
if($key=="")
{
$key="sql8.net";
}
$number =16;
$len=strlen($key);
if($len<$number )
{
for($i=0;$i<$number-$len ;$i++)
{
$key="0".$key;
}
}
if($len>$number)
{
$key=substr($key,$len-$number ,$number );
}
return $key;
}
?>
--------------------------end----------------------------------
下载相关源码文件
php,java跨平台AES加密源码
本文引自:SQL吧|企业网站源码下载(www.sql8.net) 原文参考:http://www.sql8.net/a/course/chengxu/java/2014/0620/25872.html
java代码
--------------------------start---------------------------------------
package com.sql8.net.util;
import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import sun.misc.BASE64Decoder;
public class Encryption {
private static final String KEY_ALGORITHM = "AES";
private static final String DEFAULT_CIPHER_ALGORITHM = "AES/CBC/NoPadding";
public static void main(String args[]) throws Exception {
String data = "Test String";
String key = "f";
System.out.println(encrypt(data, key));
System.out.println(desEncrypt(encrypt(data, key), key));
}
/**
* 产生一个16位的密码 不足16位在其前面补0 超过16位取期最后16位
*
* @param key
* @return
* @author yangxiaoyong
* @version 创建时间:2014年6月20日 下午3:31:30 参考 www.sql8.net
*/
private static String createKey(String key) {
int num=16;
if (key == null)
key = "sql8.net";
key = key.trim();
int length = key.length();
if (length < num) {
for (int i = 0; i < num - length; i++) {
key = "0" + key;
}
}
if (length > num) {
String k = key.substring(length - num, length);
key = k;
}
return key;
}
/**编码
* @param data
* @param key
* @return
* @throws Exception
* @author yangxiaoyong
* @version 创建时间:2014年6月20日 下午3:49:19
* 参考 www.sql8.net
*/
public static String encrypt(String data, String key) throws Exception {
try {
key = createKey(key);
String iv = key;
Cipher cipher = Cipher.getInstance(DEFAULT_CIPHER_ALGORITHM);
int blockSize = cipher.getBlockSize();
byte[] dataBytes = data.getBytes();
int plaintextLength = dataBytes.length;
if (plaintextLength % blockSize != 0) {
plaintextLength = plaintextLength + (blockSize - (plaintextLength % blockSize));
}
byte[] plaintext = new byte[plaintextLength];
System.arraycopy(dataBytes, 0, plaintext, 0, dataBytes.length);
SecretKeySpec keyspec = new SecretKeySpec(key.getBytes(), KEY_ALGORITHM);
IvParameterSpec ivspec = new IvParameterSpec(iv.getBytes());
cipher.init(Cipher.ENCRYPT_MODE, keyspec, ivspec);
byte[] encrypted = cipher.doFinal(plaintext);
return new sun.misc.BASE64Encoder().encode(encrypted);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
/**解码
* @param data
* @param key
* @return
* @throws Exception
* @author yangxiaoyong
* @version 创建时间:2014年6月20日 下午3:49:04
* 参考 www.sql8.net
*/
public static String desEncrypt(String data, String key) throws Exception {
try {
key = createKey(key);
String iv = key;
byte[] encrypted1 = new BASE64Decoder().decodeBuffer(data);
Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding");
SecretKeySpec keyspec = new SecretKeySpec(key.getBytes(), "AES");
IvParameterSpec ivspec = new IvParameterSpec(iv.getBytes());
cipher.init(Cipher.DECRYPT_MODE, keyspec, ivspec);
byte[] original = cipher.doFinal(encrypted1);
String originalString = new String(original);
return originalString;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
/**将byte转成String
* @param data
* @return
* @author yangxiaoyong
* @version 创建时间:2014年6月20日 下午3:48:29
* 参考 www.sql8.net
*/
private static String showByteArray(byte[] data) {
if (null == data) {
return null;
}
StringBuilder sb = new StringBuilder("{");
for (byte b : data) {
sb.append(b).append(",");
}
sb.deleteCharAt(sb.length() - 1);
sb.append("}");
return sb.toString();
}
}
--------------------------end----------------------------------
php代码
--------------------start------------------------------------------
<?php
$key = "f";
$data= "Test String";
$key=createKey($key);
//加密
$encrypted = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $data, MCRYPT_MODE_CBC, $key);
echo(base64_encode($encrypted));
echo '<br/>';
//解密
$encryptedData = base64_decode(base64_encode($encrypted));
$decrypted = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, $encryptedData, MCRYPT_MODE_CBC, $key);
echo($decrypted);
echo("<br/>");
/**
* 产生一个16位的密码 不足16位在其前面补0 超过16位取期最后16位
*
* @param key
* @return
* @author yangxiaoyong
* @version 创建时间:2014年6月20日 下午3:31:30 参考 www.sql8.net
*/
function createKey($key)
{
if($key=="")
{
$key="sql8.net";
}
$number =16;
$len=strlen($key);
if($len<$number )
{
for($i=0;$i<$number-$len ;$i++)
{
$key="0".$key;
}
}
if($len>$number)
{
$key=substr($key,$len-$number ,$number );
}
return $key;
}
?>
--------------------------end----------------------------------
下载相关源码文件
php,java跨平台AES加密源码
本文引自:SQL吧|企业网站源码下载(www.sql8.net) 原文参考:http://www.sql8.net/a/course/chengxu/java/2014/0620/25872.html
相关文章推荐
- [小代码]在Android和PHP之间的加密/解密,AES加密
- AES加密CBC模式兼容互通四种编程语言平台AES加密CBC模式兼容互通四种编程语言平台【PHP、Javascript、Java、C#】
- AES加密(兼容php,java,objective-c)
- php aes 加密解密可与java对接
- java php c# 三种语言的AES加密互转
- AES加密CBC模式兼容互通四种编程语言平台【PHP、Javascript、Java、C#】
- C#, Java, PHP, Python和Javascript几种语言的AES加密解密实现[转载]
- C#, Java, PHP, Python和Javascript几种语言的AES加密解密实现【多种语言AES/CBC/PKCS5Padding通用加解密数据】
- AES加密CBC模式兼容互通四种编程语言平台【PHP、Javascript、Java、C#】
- AES加密php,java,.net三种语言同步实现加密、解密
- Php AES加密、解密与Java互操作的问题
- C#, Java, PHP, Python和Javascript几种语言的AES加密解密实现[转载]
- AES加密CBC模式兼容互通四种编程语言平台【PHP、Javascript、Java、C#】
- AES加密CBC模式兼容互通四种编程语言平台【PHP、Javascript、Java、C#】
- AES加密CBC模式兼容互通四种编程语言平台【PHP、Javascript、Java、C#】
- C# 跨平台于Java的AES加密解密
- AES加密CBC模式兼容互通四种编程语言平台【PHP、Javascript、Java、C#】
- AES加密CBC模式兼容互通四种编程语言平台【PHP、Javascript、Java、C#】
- AES加密CBC模式兼容互通四种编程语言平台【PHP、Javascript、Java、C#】