Tag: aes

如何修复无效的AES密钥长度?

我正在eclipse上开展基于Web的文本加密和解密项目(遵循Struts 2) 每当我输入密码和纯文本时,我都会收到无效的AES密钥长度错误。 服务类(SymAES.java) package com.anoncrypt.services; import java.security.Key; import javax.crypto.Cipher; import javax.crypto.spec.SecretKeySpec; import sun.misc.BASE64Decoder; import sun.misc.BASE64Encoder; public class SymAES { private static final String ALGORITHM = “AES”; private static byte[] keyValue= new byte[] { ‘T’, ‘h’, ‘i’, ‘s’, ‘I’, ‘s’, ‘A’, ‘S’, ‘e’, ‘c’, ‘r’, ‘e’, ‘t’, ‘K’, ‘e’, ‘y’ }; public String encode(String valueToEnc) […]

如何使用CBC实现Java 256位AES加密

我已经阅读了以下主题并且他们帮助了一点,但我正在寻找更多信息。 如何使用BlackBerry的初始化矢量参数编写AES / CBC / PKCS5Padding加密和解密 Java 256bit AES加密 基本上,我正在做的是编写一个程序,它将加密通过TCP / IP发送的请求,然后由服务器程序解密。 加密需要是AES,我做了一些研究,我发现需要使用CBC和PKCS5Padding。 所以基本上我需要一个秘密密钥和一个IV。 我正在开发的应用程序是用于手机,所以我想使用java安全包来减小尺寸。 我已完成设计,但不确定IV和共享密钥的实现。 这是一些代码: // My user name byte[] loginId = “login”.getBytes(); byte[] preSharedKey128 = “ACME-1234AC”.getBytes(); byte[] preSharedKey192 = “ACME-1234ACME-1234A”.getBytes(); // 256 bit key byte[] preSharedKey256 = “ACME-1234ACME-1234ACME-1234”.getBytes(); byte[] preSharedKey = preSharedKey256; // Initialization Vector // Required for CBC byte[] iv ={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; […]

使用C#加密AES以匹配Java加密

我已经获得了加密的Java实现,但不幸的是我们是一个.net商店,我无法将Java整合到我们的解决方案中。 可悲的是,我也不是一个爪哇人,所以我已经和它斗争了几天,并且以为我终于转到这里求助了。 我已经搜索了高低,以寻找与Java加密工作方式相匹配的方法,并且我已经达到了在c#中使用RijndaelManaged所需的分辨率。 我其实很亲密。 我在c#中返回的字符串与前半部分匹配,但后半部分不同。 这是java实现的一个片段: private static String EncryptBy16( String str, String theKey) throws Exception { if ( str == null || str.length() > 16) { throw new NullPointerException(); } int len = str.length(); byte[] pidBytes = str.getBytes(); byte[] pidPaddedBytes = new byte[16]; for ( int x=0; x<16; x++ ) { if ( x […]

AES 256加密:公钥和私钥如何生成和使用它.net

关于AES 256加密: 什么是公钥和私钥? 如何生成这两个键? 如何使用公共加密数据? 如何使用私有来解密数据?

AES-256和PKCS7Padding在Java中失败

我有几个库,C#,PHP和Android,它们都以相同的方式加密/解密字符串,因此它们彼此兼容,即C#写入并加密数据到数据库,PHP可以成功解密它并返回原始字符串。 我现在需要使用标准的Java应用程序做同样的事情,所以我从我的Android库中获取代码并需要库,但我得到了一个例外。 据我所知,代码不是特定于Android的,所以它应该不是问题。 以下是我的加密function public static String encrypt(String plainPasword) { String password = “”; try { SecretKeySpec key = new SecretKeySpec(“hcxilkqbbhczfeultgbskdmaunivmfuo”.getBytes(“US-ASCII”), “AES”); IvParameterSpec iv = new IvParameterSpec(“ryojvlzmdalyglrj”.getBytes(“US-ASCII”)); Cipher cipher = Cipher.getInstance(“AES/CBC/PKCS7Padding”); cipher.init(Cipher.ENCRYPT_MODE, key, iv); byte[] encoded = cipher.doFinal(plainPasword.getBytes()); password = new String(Base64.encodeBase64(encoded)); } catch (Exception ex) { System.err.println(“Encryption Exception: ” + ex.toString()); } return password; […]

AES java编码,ruby解码

我正在尝试对java中的数据进行AES编码,通过网络发送并在ruby中对其进行解码。 使用基本字符串可以正常工作,但是一旦字符串的长度为16个字节或更多,我就会在解码的ruby字符串的编码中产生垃圾。 我想这与填充有关(不确定,因为它甚至影响具有16的确切大小的字符串) 我尝试使用PKCS或只是在我的字符串末尾添加空格以匹配确切的长度而没有运气 也有人可以解释为什么我必须在ruby中做一个“aes-256-cbc”知道我的java代码使用aes 128? 在ruby中尝试aes-128-cbc对任何字符串都不起作用 任何帮助是极大的赞赏 这是我的基本代码 Java的 byte[] raw = key.getBytes(); SecretKeySpec skeySpec = new SecretKeySpec(raw, “AES”); Cipher cipher = Cipher.getInstance(“AES”); cipher.init(Cipher.ENCRYPT_MODE, skeySpec); byte[] encrypted = cipher.doFinal(str.getBytes()); return new BASE64Encoder().encode(encrypted); ruby def aes_decrypt(key, encrypted) decipher =OpenSSL::Cipher::Cipher.new(“aes-256-cbc”) decipher.decrypt decipher.padding = 0 decipher.key = key d = decipher.update(encrypted) d << decipher.final logger.debug "email #{d.to_s}" […]

没有解密我加密的内容

我有一个奇怪的问题…… 基于我的解决方案将硬编码文件解密为byte [] 所以,我写了一个小的Cypher类来帮助解密/解密…它曾用于模拟在某个地方硬编码的密钥和另一个存储在其他地方的预先加密的密钥。 但这有点无关紧要。 加密过程是这样的: 检索硬编码的字节数组 用它来解密key2 使用key2来解密数据 使用key1进一步解密数据 有解密数据 我将加密数据存储为hex字符串,使用这两个函数进入那里 private static String byteArrayToHexString(byte[] b) { StringBuffer sb = new StringBuffer(b.length * 2); for (int i = 0; i < b.length; i++) { int v = b[i] & 0xff; if (v < 16) { sb.append('0'); } sb.append(Integer.toHexString(v)); } return sb.toString().toUpperCase(); } private static […]

java aes 256 java.security.InvalidKeyException:安装策略后出现非法密钥大小

我用AES 256密钥加密字节有问题。 我已经安装了这个政策。 这就是我所做的: 下载文件: http : //www.oracle.com/technetwork/java/javase/downloads/jce-7-download-432124.html 我将文件local_policy和US_export_policy移动到目录/Library/Java/JavaVirtualMachines/jdk1.7.0_40.jdk/Contents/Home/jre/lib/security 我重启mac 但我仍然收到以下代码的错误消息: KeyGenerator keyGenerator = KeyGenerator.getInstance(“AES”); keyGenerator.init(256); SecretKey secretKey = keyGenerator.generateKey(); Cipher decryption = Cipher.getInstance(“AES/CBC/PKCS5PADDING”); decryption.init(Cipher.DECRYPT_MODE, secretKey, new IvParameterSpec(secretKey.getEncoded())); // <– Illegal key size 我的Java版本: java version “1.7.0_40” Java(TM) SE Runtime Environment (build 1.7.0_40-b43) Java HotSpot(TM) 64-Bit Server VM (build 24.0-b56, mixed mode) 我需要做什么,使用256 AES加密?

将PHP Rijndael算法重写为Java(Android)

我需要在Java和php中编码一个字符串,其结果必须相同。 给出以下条件: 算法:RIJNDAEL-128 键:5P443m2Q1R9A7f5r3e1z08642 模式:ECB 初始化向量:N / A(因为我们使用的是ECB,所以忽略了IV) String to encode: 201412181656005P443m2Q1R9A7f5r3e1z08642 PHP securekey = $textkey; $this->iv = mcrypt_create_iv(32); } function encryptR($input) { $enc = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $this->securekey, $input, MCRYPT_MODE_ECB, $this->iv); return base64_encode($enc); } function decryptR($input) { return trim(mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $this->securekey, base64_decode($input), MCRYPT_MODE_ECB, $this->iv)); } } $raw_text = ‘201412181656005P443m2Q1R9A7f5r3e1z08642’; $secretKey = ‘5P443m2Q1R9A7f5r3e1z08642’; $cipher = new Cipher($secretKey); $encrypted […]

AES使用java加密openssl解密

我必须使用openssl命令行或C api加密xml文件。 输出应为Base64。 java程序将用于解密。 此程序由客户提供,无法更改(他们将此代码用于遗留应用程序)。 正如您在下面的代码中看到的那样,客户提供了一个密码短语,因此密钥将使用SecretKeySpec方法生成。 Java代码: // Passphrase private static final byte[] pass = new byte[] { ‘0’, ‘1’, ‘2’, ‘3’, ‘4’, ‘5’, ‘6’, ‘7’, ‘8’, ‘9’, ‘0’,’1′, ‘2’, ‘3’, ‘4’, ‘5’ }; public static String encrypt(String Data) throws Exception { Key key = generateKey(); Cipher c = Cipher.getInstance(“AES/ECB/PKCS5Padding”); c.init(Cipher.ENCRYPT_MODE, key); byte[] encVal = […]