`
jickcai
  • 浏览: 247443 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

AES 加密 PHP 和 JAVA 互通

阅读更多

见代码:

 

PHP代码:

 

<?php

class Security {

public static function encrypt($input, $key) {

$size = mcrypt_get_block_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_ECB);

$input = Security::pkcs5_pad($input, $size);

$td = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_ECB, '');

$iv = mcrypt_create_iv (mcrypt_enc_get_iv_size($td), MCRYPT_RAND);

mcrypt_generic_init($td, $key, $iv);

$data = mcrypt_generic($td, $input);

mcrypt_generic_deinit($td);

mcrypt_module_close($td);

$data = base64_encode($data);

return $data;

}

 

private static function pkcs5_pad ($text, $blocksize) {

$pad = $blocksize - (strlen($text) % $blocksize);

return $text . str_repeat(chr($pad), $pad);

}

 

public static function decrypt($sStr, $sKey) {

$decrypted= mcrypt_decrypt(

MCRYPT_RIJNDAEL_128,

$sKey,

base64_decode($sStr),

MCRYPT_MODE_ECB

);

 

$dec_s = strlen($decrypted);

$padding = ord($decrypted[$dec_s-1]);

$decrypted = substr($decrypted, 0, -$padding);

return $decrypted;

}

}

 

 

 

$key = "1234567891234567";

$data = "example";

 

$value = Security::encrypt($data , $key );

echo $value.'<br/>';

echo Security::decrypt($value, $key );

 

---------------

java 代码

 

 

 

import javax.crypto.Cipher;

import javax.crypto.spec.SecretKeySpec;

 

import org.apache.commons.codec.binary.Base64;

 

public class Security {

public static String encrypt(String input, String key){

byte[] crypted = null;

try{

SecretKeySpec skey = new SecretKeySpec(key.getBytes(), "AES");

Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");

cipher.init(Cipher.ENCRYPT_MODE, skey);

crypted = cipher.doFinal(input.getBytes());

}catch(Exception e){

System.out.println(e.toString());

}

return new String(Base64.encodeBase64(crypted));

}

 

public static String decrypt(String input, String key){

byte[] output = null;

try{

SecretKeySpec skey = new SecretKeySpec(key.getBytes(), "AES");

Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");

cipher.init(Cipher.DECRYPT_MODE, skey);

output = cipher.doFinal(Base64.decodeBase64(input));

}catch(Exception e){

System.out.println(e.toString());

}

return new String(output);

}

 

public static void main(String[] args) {

String key = "1234567891234567";

String data = "example";

System.out.println(Security.encrypt(data, key));

System.out.println(Security.decrypt(Security.encrypt(data, key), key));

}

}

 

分享到:
评论
2 楼 seraph_fd 2016-04-19  
  已取用,谢谢。
但将base64编码换成了Hex编码。
1 楼 raxliao 2015-06-11  
这个只支持16位的密钥,而且密码不能只能aes的随机码。

不过测试过后,的确是php 和java的确是互通的

相关推荐

    一个PHP与JAVA使用AES128位加密通信示例

    aesx/aes4.php为php aes128加密解密类 //加密方法 function desEncryptStr($xml,$keyString){} //解密方法 function DesDecryptStr($xml,$keyString){} aesx/HttpClient.class.php 通信类 send3.php调用文件

    java,php,GOLang,JavaScript,AES加密解密代码互通

    下面我们将详细探讨这些语言如何实现AES加密,并实现它们之间的互通。 首先,AES是一种块密码,使用128位的数据块进行操作,有128、192和256位的密钥长度。ECB模式是最基础的加密模式,不考虑明文的上下文关系,每...

    java,php,python AES 加解密互通

    在IT行业中,跨平台的数据安全通信是至关重要的。在标题"java,php,python AES 加解密互通...以上就是关于“java,php,python AES 加解密互通”这个主题的详细解析,涵盖了AES加密的核心概念以及在不同语言中的实现方法。

    AES 加密 解密 128位 java C# JAVASCRIPT PHP 实例

    要使PHP和Java之间的AES加密解密兼容,你需要确保在PHP中使用相同的填充方法(如ZeroPadding)和操作模式(如CBC),并且正确处理IV。在PHP中,可以使用`openssl_encrypt`函数并指定相应的选项来实现。 3. **...

    Java、C#与PHP的DES加密互通代码(测试通过)

    本篇文章将详细讲解如何在Java、C#和PHP这三个不同的编程语言环境中实现DES加密,并确保它们之间的互通性。在实际项目中,这种跨平台的加密互通能力对于多语言系统的集成至关重要。 首先,DES是一种块加密算法,它...

    易语言-AES加密源码 可与其他语言互通

    总的来说,这份"易语言-AES加密源码 可与其他语言互通"涵盖了加密领域的核心知识,包括AES算法、加密模式、密钥管理以及跨语言兼容性设计,对于提升开发者在信息安全和跨平台开发方面的技能大有裨益。通过深入研究和...

    基于openssl的AES256 的CBC模式的加解密处理类,可以和java/js互通,带加盐

    能够与Java和JavaScript的加密库互通意味着无论是在服务器端(如PHP或C++)还是在客户端(JavaScript),都可以使用相同的方法处理数据,从而保证了数据在传输过程中的安全。 总的来说,这个压缩包提供的AES256 CBC...

    java和php通用的加密算法

    本文将深入探讨一种在Java和PHP中通用的加密算法——DES(Data Encryption Standard),并详细解析其工作原理、应用实例以及跨语言互操作性。 ### 一、DES算法概述 DES是一种对称加密算法,由IBM公司开发,并于...

    DES加密Java及PHP互通

    总结来说,本例子展示了如何在Java和PHP之间使用DES加密进行数据安全传输,确保接口交互的安全性。尽管DES现在已经不是最安全的加密算法,但了解其工作原理和实现方式对于理解加密技术的基础是很有帮助的。在实际...

    php,java,ios 统一的des 加密

    总的来说,这个解决方案旨在提供一种方法,使得基于DES加密的数据在PHP服务器端、Java服务器端和iOS客户端之间可以无缝地进行安全交换,确保了数据在不同环境下的互通性和安全性。然而,为了提高安全性,现代系统更...

    Node.js中AES加密和其它语言不一致问题解决办法

    Nodejs的AES加密和Java,C#加密出来的不一致。当然,这样就不能解密了。纠结了许久:后来还是实在不行了,看了下源代码,要不然还得继续纠结下去。网上说,通常的nodejs AES和其他语言实现不一样。好吧~~或许吧。...

    Delphi XE2+标准AES加解密算法(AES/EBC,CBC/PKCS5Padding-base64)

    本源码从CSDN一位前辈的源码基础上做了更改,增加支持加密返回BASE64,更加完善。在此感谢原作者: http://download.csdn.net/download/qiaohaidong/9477264 需要注意的是仅在XE及以上版本支持Base64返回结果,...

    AES 加密 可与其他语言互通-易语言

    本教程将详细讲解如何在易语言中实现AES加密,并确保加密后的数据可以与其他语言如Java、Python、C++等进行互通。 易语言是一种以中文为程序设计语言的编程工具,它的语法简洁明了,适合初学者和专业开发者。在...

    Delphi(delphi7-XE)标准RSA加密,解密,签名.与C,Java,php等通用

    6. 与C、Java、PHP等语言的互通: 由于RSA算法的标准化,不同编程语言实现的RSA库通常遵循相同的规范,如PKCS#1。因此,你在Delphi中生成的RSA密钥对可以无缝地在C、Java、PHP等语言环境中使用,实现跨平台的加解密...

    android iOS php des 互通加密解密算法

    本篇将详细讲解如何在`Android`、`iOS`和`PHP`中实现`DES`加密解密,并探讨其在中文和长字符串处理中的应用。 首先,让我们了解`DES`的基本原理。`DES`是一种分组密码,它将明文分成64位的数据块,然后使用56位的...

    PHP、Java des加密解密实例

    例如,PHP的AES加密默认使用PKCS7填充,而Java的DES加密默认使用NoPadding,这会导致解密失败。因此,需要在两端统一填充方式和加密模式。 在实际应用中,还需要考虑安全性问题,如密钥管理、密钥轮换、加密强度等...

    Android RSA加密

    为了提高安全性,通常会结合使用RSA和其他加密方式,例如对称加密(如AES),RSA用于加密对称密钥,而大量数据则使用对称加密处理,这样既能利用RSA的非对称性,又避免了其在处理大数据时的效率问题。 在开发过程中...

Global site tag (gtag.js) - Google Analytics