- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我基本上需要解密从用 Rijndael 加密的服务器检索到的密码,我以前从未使用过加密/解密,我完全迷失了。我在这个网络的某个地方发现Java有一些不需要外部库就能实现的方法,但我没有得到它。我唯一需要的是解密,因为无论如何我都不会写回服务器。
知道如何执行此操作或在哪里可以找到相关文档吗?
我不知道这段代码是否取自答案 here是我正在寻找的东西,我不太了解它,正如我所说,我以前从未使用过此类东西:
byte[] sessionKey = null; //Where you get this from is beyond the scope of this post
byte[] iv = null ; //Ditto
byte[] plaintext = null; //Whatever you want to encrypt/decrypt
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
//You can use ENCRYPT_MODE or DECRYPT_MODE
cipher.calling init(Cipher.ENCRYPT_MODE, new SecretKeySpec(sessionKey, "AES"), new IvParameterSpec(iv));
byte[] ciphertext = cipher.doFinal(plaintext);
提前致谢。
最佳答案
这是一个简单的加密实用程序类,可能对您有帮助。它基于 ferenc.hechler 编写的代码,发布在以下网址: http://www.androidsnippets.com/encryptdecrypt-strings我对其进行了一些更改以满足我的需要。
import java.math.BigInteger;
import java.security.InvalidKeyException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.KeyGenerator;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
public class SimpleCrypto {
private static final int KEY_SIZE = 128;
public static String encrypt(String seed, String cleartext) throws NoSuchAlgorithmException, InvalidKeyException, NoSuchPaddingException, IllegalBlockSizeException, BadPaddingException {
final byte[] rawKey = getRawKey(seed.getBytes());
final byte[] result = encrypt(rawKey, cleartext.getBytes());
return bin2hex(result);
}
public static String decrypt(String seed, String encrypted) throws NoSuchAlgorithmException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException, NoSuchPaddingException {
final byte[] rawKey = getRawKey(seed.getBytes());
final byte[] enc = toByte(encrypted);
final byte[] result = decrypt(rawKey, enc);
return new String(result);
}
public static String decrypt(String seed, byte[] encrypted) throws NoSuchAlgorithmException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException, NoSuchPaddingException {
final byte[] rawKey = getRawKey(seed.getBytes());
final byte[] result = decrypt(rawKey, encrypted);
return new String(result);
}
private static byte[] getRawKey(byte[] seed) throws NoSuchAlgorithmException {
final KeyGenerator kgen = KeyGenerator.getInstance("AES");
final SecureRandom sr = SecureRandom.getInstance("SHA1PRNG");
sr.setSeed(seed);
kgen.init(KEY_SIZE, sr); // 192 and 256 bits may not be available
final SecretKey skey = kgen.generateKey();
byte[] raw = skey.getEncoded();
return raw;
}
public static byte[] encrypt(byte[] raw, byte[] clear) throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException {
final SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
final Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.ENCRYPT_MODE, skeySpec);
final byte[] encrypted = cipher.doFinal(clear);
return encrypted;
}
public static byte[] decrypt(byte[] raw, byte[] encrypted) throws IllegalBlockSizeException, BadPaddingException, NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException {
final SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
final Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.DECRYPT_MODE, skeySpec);
final byte[] decrypted = cipher.doFinal(encrypted);
return decrypted;
}
public static String toHex(String txt) {
return bin2hex(txt.getBytes());
}
public static String fromHex(String hex) {
return new String(toByte(hex));
}
public static byte[] toByte(String hexString) {
final int len = hexString.length() / 2;
final byte[] result = new byte[len];
for (int i = 0; i < len; i++) {
result[i] = Integer.valueOf(hexString.substring(2 * i, 2 * i + 2), 16).byteValue();
}
return result;
}
public static byte[] getHash(String str) {
MessageDigest digest = null;
try {
digest = MessageDigest.getInstance("SHA-256");
} catch (NoSuchAlgorithmException ex) {
ex.printStackTrace();
}
digest.reset();
return digest.digest(str.getBytes());
}
static String bin2hex(byte[] data) {
return String.format("%0" + (data.length * 2) + "X", new BigInteger(1, data));
}
}
以下是如何使用它来解密内容:
final String ssid = "MY_WIFI_SSID";
final String encWifiKey = "myEncryptedWifiKeyString";
String wifiKey = "";
try {
wifiKey = new String(SimpleCrypto.decrypt(SimpleCrypto.getHash(ssid), Base64.decode(encWifiKey, Base64.DEFAULT)));
} catch (InvalidKeyException e) {
e.printStackTrace();
} catch (IllegalBlockSizeException e) {
e.printStackTrace();
} catch (BadPaddingException e) {
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (NoSuchPaddingException e) {
e.printStackTrace();
}
关于java - 在 Android 中解密 Rijndael,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10357630/
我使用函数 EncryptStringToBytes 将纯文本加密为字节数组,并且最后将字节数组转换为字符串并返回。 我使用另一个函数将加密文本解密为纯文本。 我尝试用 RC2 对文本进行打乱,但它引
我正在考虑切换到将 session 数据存储在加密的 cookie 中,而不是在我的服务器上的某个地方。虽然这将导致每个请求使用更多带宽 - 它将节省额外的数据库服务器负载和存储空间。 无论如何,我计
我在使用 BouncyCaSTLe API for Java 实现 Rijndael 加密时遇到问题。 当我执行cipher.doFinal(inputTextBytes, intOutOff);时,
我正在使用发现的 DCPcrypt 库 here . 这是一个加密字符串的小代码 InitializationVector: AnsiString; const Key: Ansistring = '
我正在尝试模仿 http://www.hanewin.net/encrypt/aes/aes-test.htm 的 Rijndael (AES) 加密在Python3. 具体来说,当我使用以下输入时:
我正在一个类中组织一些非常基本的对称加密/解密代码以供将来使用。我能够成功加密和解密...只是有一个小问题。 这是我从一个流中读入并加密/解密到另一个流的代码: public void Encrypt
我正在尝试使用 Rijndael 加密来加密图像文件,我一定是做错了什么,因为解密的文件在文件的前面带有额外的数据,最后可能还有一点额外的数据。我对这种加密算法还很陌生,所以我很确定我只是遗漏了一些简
我正在研究 AES-256-CBC 的实现(如下所示),这将用于客户端到数据库的设置。 key 存储在本地,此方案的目的是在数据库内容泄漏时使某些值不可读。 由于IV是固定长度的,所以我打算将密文设为
我正在尝试使用 Rijndael 或 Aes 以及下面的代码来加密/解密字符串。 public class Crypto { private const string defaultVecto
我想使用 C# 研究 Rijndael 算法。有人可以帮我解决这个问题吗? 最佳答案 我假设您指的是 Rijndael 加密算法 - 在这种情况下 RinjdaelManaged会有用的。 MSDN
您好,我正在尝试通过 Rijaendal 加密/解密字符串。我根本无法弄清楚为什么解密会失败。我总是以不正确的填充错误结束。让我失望的一件事是我作为 HEX 数组返回的加密结果。它的长度为 14 个字
我有一个进行 Rijndael 加密的 PHP 代码的引用。我想将它转换为java代码,我尝试了几个例子,但没有一个对我有用。这是 php 代码: $initialisationVector = ha
我多次使用以下 Rijndael 代码进行加密。但是为什么它不能加密一个 4.2 GB 的 ISO 文件呢?事实上,我的电脑有 16GB 内存,应该不是内存问题。我使用 Windows 7 旗舰版。代
只有部分字符串被解密,我认为这与我的编码有关。 这是发生了什么: string s = "The brown fox jumped over the green frog";
我尝试了来自SO和整个网络的许多答案,但仍然没有成功。 我使用以下tool进行加密。 text to encrypt: tom key: exo123exo1exo123 input (textfie
我有一个编码和解码字符串的安全类,但是当我尝试解码时 - 出现了问题。 这是我的安全类: class Security { public static String encrypt(Strin
我写的一些软件使用了.Net4.0的Rijndael算法来加密和解密许可证信息。 问题如下:该程序生成一个字符串,该字符串被转换为 byte[]。这个 byte[] 然后用 Rijndael 加密成另
我在一个网站上找到了这段代码 private void EncryptFile(string inputFile) { string password
当我选择密码加密时,我发现Rijndael算法是最好的加密之一,无法通过暴力破解。 所以我选择了Rijndael算法对用户密码进行加密。 现在我已经确定,哈希(不可逆)比加密(可逆)更安全[如果我错了
我有一些代码可以用 Rijndael 解密密码 public static string DecryptPassword(string encrypted) { using (MemorySt
我是一名优秀的程序员,十分优秀!