0 0

java的AES算法转换为PHP问题15


import java.security.SecureRandom;

import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;

public class AES {
	
	public static String encrypt(String content, String password) throws Exception {  
		KeyGenerator kgen = KeyGenerator.getInstance("AES");  
		SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG");
		secureRandom.setSeed(password.getBytes());
        kgen.init(128, secureRandom);  
        SecretKey secretKey = kgen.generateKey();  
        byte[] enCodeFormat = secretKey.getEncoded();  
        SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES");  
        Cipher cipher = Cipher.getInstance("AES");
        byte[] byteContent = content.getBytes("utf-8");  
        cipher.init(Cipher.ENCRYPT_MODE, key);
        byte[] result = cipher.doFinal(byteContent); 
        StringBuffer sb = new StringBuffer();  
        for (int i = 0; i < result.length; i++) {  
                String hex = Integer.toHexString(result[i] & 0xFF);  
                if (hex.length() == 1) {  
                        hex = '0' + hex;  
                }  
                sb.append(hex.toUpperCase());  
        }  
        return sb.toString();  
	}
	
	public static String decrypt(String content, String password) throws Exception {
		byte[] byteContent = new byte[content.length()/2];  
        for (int i = 0;i< content.length()/2; i++) {  
                int high = Integer.parseInt(content.substring(i*2, i*2+1), 16);  
                int low = Integer.parseInt(content.substring(i*2+1, i*2+2), 16);  
                byteContent[i] = (byte) (high * 16 + low);  
        }  
		KeyGenerator kgen = KeyGenerator.getInstance("AES");
		SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG");
		secureRandom.setSeed(password.getBytes());
		kgen.init(128, secureRandom);
		SecretKey secretKey = kgen.generateKey();
		byte[] enCodeFormat = secretKey.getEncoded();
		SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES");
		Cipher cipher = Cipher.getInstance("AES");
		cipher.init(Cipher.DECRYPT_MODE, key);
		byte[] result = cipher.doFinal(byteContent);
		return new String(result);
	}
}


因为公司原有业务需要现在我需要将这段代码转换为PHP,多谢,分包够
2014年11月04日 10:01
目前还没有答案

相关推荐

    对接java AES/ECB/PKCS7Padding加密

    本篇将深入探讨如何在PHP中实现与Java兼容的AES/ECB/PKCS7Padding加密方式,并将结果转化为16进制字符串。 AES(Advanced Encryption Standard),即高级加密标准,是一种广泛使用的对称加密算法。ECB(Electronic ...

    java使用Hex编码解码实现Aes加密解密功能示例

    在这个示例中,密钥首先是以字符串形式存在,然后通过`Hex.decodeHex()`方法将其从Hex编码转换回原始的字节数组,这是因为AES算法需要字节形式的密钥。如果密钥是经过Hex编码的,那么在使用之前必须进行解码。 接...

    常用php 的aes 加密算法 改成 java 版本

    本篇将详细解释如何将PHP中的AES加密算法转换为Java版本。 首先,我们需要理解AES的工作原理。AES采用块加密方式,标准的块大小为128位(16字节)。它使用相同的密钥进行加密和解密,支持128、192和256位的密钥长度...

    java和php通用的加密算法

    此外,为了与PHP兼容,Java代码中还使用了Base64编码来转换字节数组为字符串,便于在不同系统间传输。 ### 三、PHP中的DES实现 虽然给定的代码片段只涉及Java,但在PHP中实现DES也遵循类似的逻辑。PHP提供了`...

    一个采用AES算法的加密模块和调用示例(VB)

    在本资源中,我们有一个采用AES算法的加密模块,它以VB(Visual Basic)语言编写,可以方便地集成到各种应用程序中,如编译成DLL后,可用于Web、ASP、PHP、Java、VB、VC、Excel、Word等多个平台。 AES加密算法基于...

    Java实现AES/CBC/PKCS7Padding加解密的方法

    Java实现AES/CBC/PKCS7Padding加解密的方法是指使用Java语言实现AES对称加密算法的加解密过程,其中包括了加密和解密两个步骤。AES是一种对称加密算法,使用同一个密钥进行加密和解密操作。 在Java中,AES加解密...

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

    由于这个类设计为与Java和JavaScript互通,这意味着它可能采用了跨语言兼容的数据表示方式,比如JSON或Base64编码的字符串,以便在不同平台之间传递加密和解密的结果。 这个实现的一个关键优点是其兼容性。能够与...

    AES报文加密1

    加密过程通常是先将要发送的数据转换为JSON格式,然后使用AES加密方法对"body"字段进行加密,得到的密文再作为请求的一部分发送给服务器。服务器端接收到密文后,使用相同的密钥进行解密,还原出原始数据。 在Java...

    PHP的AES加密算法完整实例

    - `hexToStr`:将十六进制字符串转换为二进制字符串,用于将Java字节码转换为PHP可以使用的格式。 - `addpadding` 和 `strippadding`:这两个方法用于实现PKCS7填充,确保数据长度符合AES块大小的要求。 在示例的...

    php,java,ios 统一的des 加密

    密钥和初始化向量(IV)的处理与Java和PHP类似,都需要转换成字节序列。 在跨平台的实现中,关键在于保持一致性,包括密钥的生成、加密模式、填充方式以及IV的使用。文件`des.php`可能包含了PHP的实现代码,`des-...

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

    正确做法是先将中文字符串转换为UTF-8字节序列,再进行加密,解密后回转为原始的字符串。 对于长字符串,`DES`的64位数据块限制意味着长字符串需要被拆分成多个64位的数据块进行处理。在实际操作中,通常会使用`...

    iOS 安卓 通用AES加密

    AES加密的基本原理是通过一系列的替换、置换和混淆操作,将明文数据转化为密文,只有持有正确密钥的人才能解密恢复原始数据。这个过程包括了四个主要步骤:字节替代、行位移、列混淆和轮密钥加。AES支持128、192和...

    Delphi的加解密封装单元 - Cryptography (目前只支持AES/DES/MD5)

    在这个特定的场景中,我们关注的是一个名为"Cryptography"的封装单元,它专门为Delphi开发者提供了对AES、DES和MD5加密算法的支持。 **AES(Advanced Encryption Standard)**是目前最广泛使用的对称加密算法之一,...

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

    例如,Java和C#通常以Base64编码输出加密结果,而PHP可能需要额外的转换步骤。在提供的"Java、C#与PHP的DES加密互通代码(测试通过).txt"文件中,应该包含了示例代码和测试用例,演示了如何在这些环境中正确地进行...

    aes加密前端js+后台解密

    AES(Advanced Encryption Standard)是一种广泛使用的对称加密算法,它基于块密码,具有高安全性和高效性。在互联网应用中,AES加密常用于保护敏感数据,如用户密码、个人信息等,确保数据在传输过程中的安全性。 ...

    php字符串加密解密,我还有相同加密方法的delphi、php、C#、QT、golang、java版本

    这种情况下,通常会采用某种常见的加密算法,如AES(高级加密标准)或RSA(公钥加密算法)。 AES是一种对称加密算法,速度快,适合大量数据的加密。在PHP中,可以使用`openssl_encrypt`和`openssl_decrypt`函数进行...

    AES-CBC-PKCS7Padding-:AESCBCPKCS7Padding加密的实现

    常会要到加密算法AES(Advanced Encryption Standard),下面是Python和PHP的实现。Python需要安Crypto库(pip install pycrypto或访问)PHP需要安装mcrypt扩展说明加密模式采用AES/CBC/PKCS7Padding注意:加密后的字节...

    DES加密Java及PHP互通

    这一步骤是将密钥规格转换为JCE(Java Cryptography Extension)可以处理的格式。 3. **初始化Cipher**:`Cipher`类是负责加解密的核心组件。通过`Cipher.getInstance(ALGORITHM_DES)`获取一个`Cipher`实例,这里的...

    delphi字符串加密解密,我还有相同加密方法的php、C#、QT、golang、java版本

    它通常涉及将明文字符串转换为密文,然后在接收方使用相应的密钥将其解密回原始格式。加密算法有多种,如对称加密(如DES, AES)和非对称加密(如RSA, ECC)。 2. **Delphi中的加密**:Delphi是一个基于Pascal语言...

    DESPlus 加密解密 PHP版

    DESPlus是一种基于传统数据加密标准(DES)的增强加密算法,它在DES的基础上增加了自定义的填充和编码方式,使得加密后的结果可以转化为可读的数字和字母组合,方便在某些场景下使用和理解。本PHP实现是针对网上常见...

Global site tag (gtag.js) - Google Analytics