0 0

自己写的AES加密工具类的加密结果为什么与在线AES加密网站的加密结果不一致?10

我写了一个AES加密工具类,对明文进行AES加密,相关参数如下:

加密算法:AES
明文:A
算法模式:CBC
密钥长度:256
密钥:1qaz@WSX1qaz@WSX
密钥偏移量:1234567890123456
补码方式:PKCS7Padding
加密结果编码方式:base64

我的加密结果是:WP58v5NfB+3Eo72KBAabGw==
网站上的加密结果是:5CqrZd+/SANPAEF3+Y9XfFKcsC99XywOmJUlRVehFb8=
不知2个结果哪个正确?如果是我的结果不正确,请问问题出在哪?

在线AES加密网站地址:http://www.seacha.com/tools/aes.php?src=A&mode=CBC&keylen=256&key=1qaz%40WSX1qaz%40WSX&iv=1234567890123456&bpkcs=pkcs7padding&encoding=base64&type=0

 

附AES加密工具类代码:

package com.demo.aes.util;

import java.io.UnsupportedEncodingException;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.security.Security;

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

import org.apache.commons.codec.DecoderException;
import org.bouncycastle.jce.provider.BouncyCastleProvider;

public class AESUtils {
	private static final String PWD = "1qaz@WSX1qaz@WSX";
	private static final String IV = "1234567890123456";

	public static SecretKeySpec makeKey() throws NoSuchAlgorithmException,
			UnsupportedEncodingException, DecoderException {
		Security.addProvider(new BouncyCastleProvider());
		KeyGenerator kgen = KeyGenerator.getInstance("AES");
		kgen.init(256, new SecureRandom(PWD.getBytes("UTF-8")));
		SecretKey key = kgen.generateKey();
		SecretKeySpec keySpec = new SecretKeySpec(key.getEncoded(), "AES");

		// SecretKeySpec keySpec = new SecretKeySpec(PWD.getBytes("UTF-8"),
		// "AES");
		return keySpec;
	}

	public static IvParameterSpec makeIv() throws UnsupportedEncodingException,
			DecoderException {
		return new IvParameterSpec(IV.getBytes("UTF-8"));
	}

	/**
	 * 加密
	 * 
	 * @param content
	 *            需要加密的内容
	 * @param password
	 *            加密密码
	 * @return
	 */
	public static byte[] encrypt(String content) {
		try {
			Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding");
			cipher.init(Cipher.ENCRYPT_MODE, makeKey(), makeIv());
			return cipher.doFinal(content.getBytes("utf-8"));
		} catch (Exception e) {
			e.printStackTrace();
		}

		return null;
	}

	/**
	 * 解密
	 * 
	 * @param content
	 *            待解密内容
	 * @param password
	 *            解密密钥
	 * @return
	 */
	public static byte[] decrypt(byte[] content, String password) {

		try {
			Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding");
			cipher.init(Cipher.DECRYPT_MODE, makeKey(), makeIv());
			return cipher.doFinal(content);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}

	public static void main(String[] args) throws UnsupportedEncodingException {
		String content = "A";
		System.out.println("TLV加密前:" + content);
		byte[] encryptResult = encrypt(content);
		System.out.println("Base64加密后:" + BASE64Utils.encode(encryptResult));
	}

 

 

2013年6月24日 16:08

3个答案 按时间排序 按投票排序

0 0

有几个问题
1、 SecretKeySpec keySpec = new SecretKeySpec(key.getEncoded(), "AES"); 
    SecretKeySpec keySpec = new SecretKeySpec(PWD.getBytes("UTF-8"),"AES");

第一行他的密钥是使用算法随机生成的,他是使用你提供的PWD作为种子(用于生成密钥的算法使用)
第二行他的密钥要是直接使用你提供PWD,没有让java 算法帮你生成,但是你给出的是128bit(16位字符串),按照AES算法他要求密钥是128/192/256,所以你这里是使用了128位AES的加密算法。而不是256位。网站的密钥是256位的密钥,而不是种子。

但是网站上面128位用你的代码测试过,可行。。但是256位不行,赶脚你的没错。。。因为网站上面选择了256位,但是还允许密钥输入其他位数,这个在java中应该会报错。。我不知道他是怎么弄的。

2013年6月26日 11:11
0 0

去掉makeKey方法,
然后IvParameterSpec创建IV向量,
我也遇到这问题,已解决。

2013年6月25日 15:50
0 0

都对,内部实现可能不一样,你又不知道在线加密有没有对你传递的参数做其他处理。

2013年6月24日 17:31

相关推荐

    AES加密工具类

    AES加密解密工具类,解决windows下和linux加密解密不同问题。

    android AES加密工具类

    android 可以使用的 AES加密工具类

    AES加密工具

    **AES加密工具** AES(Advanced Encryption Standard)是目前广泛应用的一种块密码标准,它以其高效、安全的特点被广泛用于数据加密。AES加密工具是基于AES算法实现的软件,用于对数据进行加解密操作。本工具是由...

    RSA+AES 加密工具类 Java

    总的来说,这个“RSA+AES加密工具类 Java”为开发者提供了一个便利的工具,帮助他们在Java项目中集成高级的加密功能,确保数据的安全传输和存储。通过合理地使用RSA和AES,可以在不牺牲效率的前提下提高应用的安全性...

    aes加密工具类

    用java编写的aes加密工具,内置加密、解密、测试的方法。

    4.nodejs和java的AES加密结果保持一致.doc

    AES 加密结果保持一致 在 Node.js 和 Java 中实现 AES 加密结果保持一致是非常重要的。以下是相关知识点的详细解释: AES 加密简介 AES(Advanced Encryption Standard)是一种对称加密算法,主要用于保护数据的...

    AES 加密工具(ECB,CBC,CMAC)

    **AES加密工具(ECB,CBC,CMAC)** AES,全称为Advanced Encryption Standard,是当前广泛应用的一种对称加密算法,由NIST(美国国家标准与技术研究所)在2001年标准化。它取代了DES(Data Encryption Standard)...

    C# POST请求、AES加密工具类

    封装POST请求和 AES加密解密的代码,可以作为工具类直接引用,封装POST请求和 AES加密解密的代码,可以作为工具类直接引用

    java .net AES加密不兼容问题:

    在给定的文件中,`AesUtils.java`可能是一个Java实现的AES加密工具类,而`net.txt`可能是.NET平台上AES加密的相关说明或代码片段。分析这两个文件可以帮助我们更好地理解具体的实现差异,并针对性地解决不兼容问题。...

    C# AES加密解密小工具

    总之,“C# AES加密解密小工具”是一个实用的开发辅助工具,它简化了AES加密和解密的过程,使开发者能够快速地为自己的应用程序添加数据加密功能。在实际应用中,为了提高安全性,可以考虑使用更安全的加密模式,如...

    Delphi.rar_AES_AES加密_delphi AES加密_delphi 加解密_java delphi aes

    本资源"Delphi.rar_AES_AES加密_delphi AES加密_delphi 加解密_java delphi aes"提供的是在Delphi编程环境中实现AES加密和解密的示例代码,其目标是与Java平台上的加解密过程保持兼容。 首先,让我们深入了解一下...

    AES256加密工具类,及其所必须的jar包

    AES256加密工具类是信息安全领域中一个重要的实用组件,它主要负责对数据进行加密保护,确保数据在传输或存储过程中的安全。AES(Advanced Encryption Standard)是一种广泛使用的对称加密算法,提供了强大的安全性...

    C#写的大文件AES加密解密程序

    通过这个"C#写的大文件AES加密解密程序",开发者可以学习如何在C#环境中实现高效且安全的文件加密操作,这对于保护敏感数据和满足合规性要求具有重要意义。同时,这也是一个很好的实践案例,展示了如何处理大文件和...

    C语言AES加密解密,CBC模式,256(含测试代码且结果与Java一致)

    本项目涉及的是C语言实现的AES加密解密功能,特别关注了CBC(Cipher Block Chaining)模式以及256位的密钥长度。以下是对这些知识点的详细阐述: **AES加密算法:** AES是由NIST(美国国家标准与技术研究所)在2001...

    aes加密工具1.0

    aes 加密工具1.0

    JAVA实现AES加密解密工具类

    AES加密解密工具类是开发人员在处理敏感信息时常用的实用工具,它可以简化加密和解密过程。本篇文章将深入探讨如何在Java中实现AES加密解密,并介绍相关的关键知识点。 首先,我们需要理解AES加密的基本原理。AES是...

    aes加密算法delphi

    ### AES加密算法在Delphi中的实现 AES(Advanced Encryption Standard,高级加密标准)是一种对称加密算法,被广泛应用于数据安全领域。它采用固定的数据块大小(128位),支持128、192或256位密钥长度。在Delphi中...

    Qt实现AES加密解密

    在Qt中,我们可以利用QCryptographicHash、QByteArray和QBuffer等类来实现AES加密和解密。 1. **AES加密算法**: AES有三种不同的密钥长度,即128位(AES_128)、192位(AES_192)和256位(AES_256)。这些长度的选择直接...

    AES加密软件 AES加密软件

    AES加密软件,全称为“高级加密标准”(Advanced Encryption Standard),是目前广泛应用的对称加密算法,用于保护敏感数据的安全。AES是由比利时密码学家Joan Daemen和Vincent Rijmen设计的,取代了之前的DES(Data...

    xxtea/aes加密解密工具

    总结来说,XXtea/aes加密解密工具结合了XXtea和AES两种加密算法,利用OpenSSL库提供强大的加密能力,同时支持lua语言集成,适用于游戏开发和数据保护场景。通过使用这样的工具,开发者可以更便捷地对文件和数据进行...

Global site tag (gtag.js) - Google Analytics