- 浏览: 835166 次
- 性别:
- 来自: 南京
文章分类
最新评论
-
xieye:
jetty插件有好几个版本,1.6,1.7,1.8
我选的是用 ...
tapestry入门(翻译)3 导入项目到eclipse -
xieye:
还有,
注:第2部分时,需要先安装jetty,我自己在安装过程 ...
tapestry入门(翻译)3 导入项目到eclipse -
xieye:
说明一下:实际使用中,导入时我并没有错误。2、我把eclips ...
tapestry入门(翻译)3 导入项目到eclipse -
xieye:
其实还是有一些先决条件的。1是外部环境,2是进步是阶段性的(意 ...
(转载文章)如何愉悦起来:一位精神治疗师的见解 -
mandy_yanzi:
我都已经饿7天了坚持为了我的衣衣
身体健康的问题
代码主要来源如下,但是注意做了修改:
https://gist.github.com/thomasdarimont/fae409eaae2abcf83bd6633b961e7f00
这是aes加密解密互通的代码,php和java的,一种语言加密,另一种可以解密。
修改的地方:省略了向量的输入,太麻烦。读者可自行修改此代码,使得加密更加健壮。
php代码:
java代码
https://gist.github.com/thomasdarimont/fae409eaae2abcf83bd6633b961e7f00
这是aes加密解密互通的代码,php和java的,一种语言加密,另一种可以解密。
修改的地方:省略了向量的输入,太麻烦。读者可自行修改此代码,使得加密更加健壮。
php代码:
class AesCipher { private const OPENSSL_CIPHER_NAME = "aes-128-cbc"; private const CIPHER_KEY_LEN = 16; //128 bits private static function fixKey( $key ) { if ( strlen( $key ) < AesCipher::CIPHER_KEY_LEN ) { //0 pad to len 16 return str_pad( "$key", AesCipher::CIPHER_KEY_LEN, "0" ); } if ( strlen( $key ) > AesCipher::CIPHER_KEY_LEN ) { //truncate to 16 bytes return substr( $key, 0, AesCipher::CIPHER_KEY_LEN ); } return $key; } /** * Encrypt data using AES Cipher (CBC) with 128 bit key * * @param type $key - key to use should be 16 bytes long (128 bits) * @param type $data - data to encrypt * @return encrypted data in base64 encoding with iv attached at end after a : */ public static function encrypt( $key, $data ) { $iv = substr( $key, 0, 5 ); $iv = str_pad( $iv, 16, '0' ); $encodedEncryptedData = base64_encode( openssl_encrypt( $data, AesCipher::OPENSSL_CIPHER_NAME, AesCipher::fixKey( $key ), OPENSSL_RAW_DATA, $iv ) ); $encodedIV = base64_encode( $iv ); $encryptedPayload = $encodedEncryptedData . ":" . $encodedIV; return $encryptedPayload; } /** * Decrypt data using AES Cipher (CBC) with 128 bit key * * @param type $key - key to use should be 16 bytes long (128 bits) * @param type $data - data to be decrypted in base64 encoding with iv attached at the end after a : * @return decrypted data */ public static function decrypt( $key, $data ) { $parts = explode( ':', $data ); //Separate Encrypted data from iv. $encrypted = $parts[0]; $iv = $parts[1]; $decryptedData = openssl_decrypt( base64_decode( $encrypted ), AesCipher::OPENSSL_CIPHER_NAME, AesCipher::fixKey( $key ), OPENSSL_RAW_DATA, base64_decode( $iv ) ); return $decryptedData; } }
java代码
import javax.crypto.Cipher; import javax.crypto.spec.IvParameterSpec; import javax.crypto.spec.SecretKeySpec; import java.util.Base64; public class AesCrypto { private static String CIPHER_NAME = "AES/CBC/PKCS5PADDING"; private static int CIPHER_KEY_LEN = 16; //128 bits /** * * Encrypt data using AES Cipher (CBC) with 128 bit key * * * * @param key - key to use should be 16 bytes long (128 bits) * * @param iv - initialization vector * * @param data - data to encrypt * * @return encryptedData data in base64 encoding with iv attached at end after a : * */ public static String encrypt(String key, String data) { String iv = key.substring(0,5); iv += "00000000000"; try { IvParameterSpec ivSpec = new IvParameterSpec(iv.getBytes("UTF-8")); SecretKeySpec secretKey = new SecretKeySpec(fixKey(key).getBytes("UTF-8"), "AES"); Cipher cipher = Cipher.getInstance(AesCrypto.CIPHER_NAME); cipher.init(Cipher.ENCRYPT_MODE, secretKey, ivSpec); byte[] encryptedData = cipher.doFinal((data.getBytes())); String encryptedDataInBase64 = Base64.getEncoder().encodeToString(encryptedData); String ivInBase64 = Base64.getEncoder().encodeToString(iv.getBytes("UTF-8")); return encryptedDataInBase64 + ":" + ivInBase64; } catch (Exception ex) { throw new RuntimeException(ex); } } private static String fixKey(String key) { if (key.length() < AesCrypto.CIPHER_KEY_LEN) { int numPad = AesCrypto.CIPHER_KEY_LEN - key.length(); for (int i = 0; i < numPad; i++) { key += "0"; //0 pad to len 16 bytes } return key; } if (key.length() > AesCrypto.CIPHER_KEY_LEN) { return key.substring(0, CIPHER_KEY_LEN); //truncate to 16 bytes } return key; } /** * * Decrypt data using AES Cipher (CBC) with 128 bit key * * * * @param key - key to use should be 16 bytes long (128 bits) * * @param data - encrypted data with iv at the end separate by : * * @return decrypted data string * */ public static String decrypt(String key, String data) { try { String[] parts = data.split(":"); IvParameterSpec iv = new IvParameterSpec(Base64.getDecoder().decode(parts[1])); SecretKeySpec secretKey = new SecretKeySpec(key.getBytes("UTF-8"), "AES"); Cipher cipher = Cipher.getInstance(AesCrypto.CIPHER_NAME); cipher.init(Cipher.DECRYPT_MODE, secretKey, iv); byte[] decodedEncryptedData = Base64.getDecoder().decode(parts[0]); byte[] original = cipher.doFinal(decodedEncryptedData); return new String(original); } catch (Exception ex) { throw new RuntimeException(ex); } } public static void main(String[] args) { String key = "GNwmNkJ2UZDwhqJ2"; // 128 bit key String plain_text = "input张 三你好!!"; String encrypted = encrypt(key, plain_text); System.out.println(encrypted); String decrypt = decrypt(key, encrypted); System.out.println(decrypt); } }
发表评论
-
召唤神龙 - 安装 centos 8, php 8, mysql 8, laravel 8 的整套 php 运行环境
2020-11-27 16:26 712本文编写时间:2020-11-27 传说集齐龙珠可以召唤神 ... -
centos8 使用阿里镜像快速安装php7.4套件
2020-11-15 00:48 855centos8 使用阿里镜像快速安装php7.4套件 本文只 ... -
centos7 使用阿里镜像快速安装php7.4套件
2020-11-15 00:32 1258本文只考虑centos7 今日 2020-11-16 rem ... -
composer常用命令
2020-11-05 14:46 1483列出当前全局配置 composer config -l -g ... -
期待centos8+php8 + mysql8 + laravel8,8888
2020-10-29 19:24 524期待centos8+php8 + mysql8 目前主要使用 ... -
ubuntu 安装 php7.4以及各类插件
2020-10-24 13:20 1133ubuntu 安装 php7.4以及各类插件 安装系统 最近 ... -
宝塔定义站点
2020-02-24 10:41 2宝塔定义站点。 1111111111111111111111 ... -
让php-fpm以root账号运行
2020-02-19 21:41 825一般来说,我们没有这种需求,但是当需要时, 可以让php-fp ... -
将代码部署到coding.net
2020-01-10 14:20 649coding.net 是一个git仓库,有免费有收费。 首先 ... -
php部署工具deployer技巧 - vendor目录创建
2020-01-06 12:06 912deployer是个好东西,可是每次都composer ,其实 ... -
自定义redis多个实例
2020-01-04 01:17 650假如多个项目部署到同一台服务器,有时会被redis的各项目前缀 ... -
推荐使用php的部署工具 deployer
2020-01-03 16:48 921php部署代码可以使用 https://deployer.or ... -
使用composer 类库 cachetool 清除opcache 的缓存
2020-01-03 16:38 966php的生产服务器上,需要把opche打开。 但有时,会被缓 ... -
laravel容器学习体会
2019-12-31 15:11 674根据文档与实测结果 假设我在app下建一个Services目 ... -
phalcon 自定义超强日志类
2019-12-18 10:00 833phalcon自带的日志文件类,有两个麻烦之处。 1、路径不能 ... -
自定义后台的使用
2019-12-18 05:22 424如果自己写后台,保存用户的表单请求值 所有的情况如下: 1 ... -
phalcon 自定义事件使用的多种方式
2019-12-16 20:43 781方法1:官方文档的方式。 这是控制器: public ... -
phalcon对控制器返回值的使用以输出json
2019-12-16 19:17 835在phalcon里,控制器的Action的方法的返回值没啥用。 ... -
phalcon数据库DB使用实例
2019-12-12 17:12 701整理了一下phalcon的db使用,写了个demo。 ... -
php-redis5.0降级成php-redis4.3
2019-08-22 00:01 896最新版本的php的redis插件,版本是5.0 但是可能会有 ...
相关推荐
总的来说,跨语言的AES加密解密互通需要对各种语言的加密API有深入理解,并保持一致性以确保数据安全地在不同环境中传输。这个主题对于开发跨平台应用和微服务架构的开发者来说,是一个非常实用的知识点。
在IT行业中,跨平台的数据安全通信是至关重要的。在标题"java,php,python AES 加解密互通...以上就是关于“java,php,python AES 加解密互通”这个主题的详细解析,涵盖了AES加密的核心概念以及在不同语言中的实现方法。
aesx/aes4.php为php aes128加密解密类 //加密方法 function desEncryptStr($xml,$keyString){} //解密方法 function DesDecryptStr($xml,$keyString){} aesx/HttpClient.class.php 通信类 send3.php调用文件
要使PHP和Java之间的AES加密解密兼容,你需要确保在PHP中使用相同的填充方法(如ZeroPadding)和操作模式(如CBC),并且正确处理IV。在PHP中,可以使用`openssl_encrypt`函数并指定相应的选项来实现。 3. **...
在提供的"Java、C#与PHP的DES加密互通代码(测试通过).txt"文件中,应该包含了示例代码和测试用例,演示了如何在这些环境中正确地进行DES加密并验证互通性。 总的来说,实现Java、C#和PHP之间的DES加密互通涉及...
是标准的AES算法,支持在线AES加解密网站互解。 本源码从CSDN一位前辈的源码基础上做了更改,增加支持加密返回BASE64,更加完善。在此感谢原作者: http://download.csdn.net/download/qiaohaidong/9477264 需要注意...
由于这个类设计为与Java和JavaScript互通,这意味着它可能采用了跨语言兼容的数据表示方式,比如JSON或Base64编码的字符串,以便在不同平台之间传递加密和解密的结果。 这个实现的一个关键优点是其兼容性。能够与...
本篇将详细讲解如何在`Android`、`iOS`和`PHP`中实现`DES`加密解密,并探讨其在中文和长字符串处理中的应用。 首先,让我们了解`DES`的基本原理。`DES`是一种分组密码,它将明文分成64位的数据块,然后使用56位的...
总的来说,这份"易语言-AES加密源码 可与其他语言互通"涵盖了加密领域的核心知识,包括AES算法、加密模式、密钥管理以及跨语言兼容性设计,对于提升开发者在信息安全和跨平台开发方面的技能大有裨益。通过深入研究和...
文件`des.php`可能包含了PHP的实现代码,`des-ios.zip`可能包含了一个iOS项目,其中包含了Objective-C或Swift的加密解密逻辑,而`des-java.zip`则可能包含了一个Java项目的源码。 总的来说,这个解决方案旨在提供一...
同时,我们也简要探讨了如何在PHP中实现同样的功能,以及如何确保Java和PHP之间加密解密的互操作性。虽然DES因其密钥长度较短而被认为不够安全,但在理解加密算法的基本概念和实践上,它仍然是一个极佳的学习案例。...
本篇文章将深入探讨Delphi (从delphi7到XE版本)中的RSA实现,以及如何与其他编程语言如C、Java、PHP进行跨平台的加解密和签名操作。 1. RSA原理: RSA基于数论中的大数因子分解难题,由Ron Rivest、Adi Shamir和...
Nodejs的AES加密和Java,C#加密出来的不一致。当然,这样就不能解密了。纠结了许久:后来还是实在不行了,看了下源代码,要不然还得继续纠结下去。网上说,通常的nodejs AES和其他语言实现不一样。好吧~~或许吧。...
总结来说,本例子展示了如何在Java和PHP之间使用DES加密进行数据安全传输,确保接口交互的安全性。尽管DES现在已经不是最安全的加密算法,但了解其工作原理和实现方式对于理解加密技术的基础是很有帮助的。在实际...
本教程将详细讲解如何在易语言中实现AES加密,并确保加密后的数据可以与其他语言如Java、Python、C++等进行互通。 易语言是一种以中文为程序设计语言的编程工具,它的语法简洁明了,适合初学者和专业开发者。在...
以下是一个Java DES加密解密的例子: ```java import javax.crypto.Cipher; import javax.crypto.spec.SecretKeySpec; public class DESUtil { private final static String ALGORITHM = "DES"; public static ...
为了提高安全性,通常会结合使用RSA和其他加密方式,例如对称加密(如AES),RSA用于加密对称密钥,而大量数据则使用对称加密处理,这样既能利用RSA的非对称性,又避免了其在处理大数据时的效率问题。 在开发过程中...