以下示例有什么问题?
问题是解密字符串的第一部分是无意义的.但是,剩下的很好,我明白了......
Run Code Online (Sandbox Code Playgroud)Result: `£eB6O?geS??i are you? Have a nice day.
@Test
public void testEncrypt() {
try {
String s = "Hello there. How are you? Have a nice day.";
// Generate key
KeyGenerator kgen = KeyGenerator.getInstance("AES");
kgen.init(128);
SecretKey aesKey = kgen.generateKey();
// Encrypt cipher
Cipher encryptCipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
encryptCipher.init(Cipher.ENCRYPT_MODE, aesKey);
// Encrypt
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
CipherOutputStream cipherOutputStream = new CipherOutputStream(outputStream, encryptCipher);
cipherOutputStream.write(s.getBytes());
cipherOutputStream.flush();
cipherOutputStream.close();
byte[] encryptedBytes = outputStream.toByteArray();
// Decrypt cipher
Cipher decryptCipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
IvParameterSpec ivParameterSpec = …Run Code Online (Sandbox Code Playgroud) 在Android 上如何加密/解密 __CODE__和其他文件有一个很好的例子__CODE__吗?我正在开发一个需要加密/解密数据的项目,但我不确定该怎么做.
Java .class文件可以很容易地反编译.如果我必须在代码中使用登录数据,我该如何保护我的数据库?
我有一个在我的开发MacBook Pro上运行良好的测试,但无法在持续集成的TeamCity服务器中运行.
错误如下:
java.security.InvalidKeyException: Illegal key size
at javax.crypto.Cipher.a(DashoA13*..)
at javax.crypto.Cipher.init(DashoA13*..)
at javax.crypto.Cipher.init(DashoA13*..)
Run Code Online (Sandbox Code Playgroud)
开发盒和TeamCity都使用Java 1.6,我使用BouncyCastle库来满足特殊的AES加密需求.
代码如下:
private byte[] aesEncryptedInfo(String info) throws UnsupportedEncodingException, IllegalBlockSizeException, BadPaddingException, InvalidKeyException, NoSuchAlgorithmException, NoSuchPaddingException, InvalidParameterSpecException, InvalidAlgorithmParameterException, NoSuchProviderException {
Security.addProvider(new BouncyCastleProvider());
SecretKey secret = new SecretKeySpec(CUSTOMLONGSECRETKEY.substring(0, 32).getBytes(), "AES");
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding", "BC");
cipher.init(Cipher.ENCRYPT_MODE, secret, new IvParameterSpec(VECTOR_SECRET_KEY.getBytes()));
return cipher.doFinal(info.getBytes("UTF-8"));
}
Run Code Online (Sandbox Code Playgroud)
UPDATE
看起来根据所选答案,我必须在我的TeamCity安装上修改一些东西,它可能会影响一些用户安装 - 所以它不是一个好选择我必须切换到另一个加密库来做到这一点没有限制.所以充满弹性的城堡可能会有所帮助.
更新2
我实际上切换到使用BouncyCastle来避免这种限制.请注意,这仅适用于直接使用自己的BC类,而不是BC提供程序.
我正在开发一个从数据库读取一些数据的应用程序.与db的连接是通过标准登录/密码机制执行的.
问题是:如何存储db密码?如果我将它存储为类成员,则可以通过反编译操作轻松检索它.
我认为混淆并不能解决问题,因为在混淆的代码中也可以轻松找到字符串密码.
有人有建议吗?
我正在开发一个Android应用程序,我需要在它的一个方面使用加密.我对使用哪种算法(AES,DES,RSA等)无动于衷.我知道Java有一个加密包,但我根本不熟悉它.有人可以发布一个关于如何进行加密/解密功能的例子吗?
我想加密一个字符串然后把它放在一个文件上.也想在我想要的时候解密它.我不需要非常强大的安全性.我只是想让其他人更难获取我的数据.
我尝试了几种方法.这是这些.
Md5加密:
public static final String md5(final String toEncrypt) {
try {
final MessageDigest digest = MessageDigest.getInstance("md5");
digest.update(toEncrypt.getBytes());
final byte[] bytes = digest.digest();
final StringBuilder sb = new StringBuilder();
for (int i = 0; i < bytes.length; i++) {
sb.append(String.format("%02X", bytes[i]));
}
return sb.toString().toLowerCase();
} catch (Exception exc) {
return ""; // Impossibru!
}
}
Run Code Online (Sandbox Code Playgroud)
我尝试了这个功能,并能够加密字符串,但我不能解密它的数据.所以这不是解决方案.
DES加密:
密码短语是自动生成的.密码始终是一样的吗?然后我的安全在哪里.所以这也不是我的解决方案.
AES加密:
我也从这个链接尝试过Aes.这里的密钥也是自动生成的?
还有其他方法吗?
我已经阅读了以下主题并且他们帮助了一点,但我正在寻找更多信息.
如何使用BlackBerry的初始化矢量参数编写AES/CBC/PKCS5Padding加密和解密
基本上,我正在做的是编写一个程序,它将加密通过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};
IvParameterSpec ips = new IvParameterSpec(iv);
byte[] encodedKey = new byte[loginId.length + preSharedKey.length];
System.arraycopy(loginId, 0, encodedKey, 0, loginId.length);
System.arraycopy(preSharedKey, 0, encodedKey, loginId.length, preSharedKey.length);
// The SecretKeySpec provides a mechanism for application-specific generation
// of cryptography …Run Code Online (Sandbox Code Playgroud) 我试图在Android和IPhone平台上使用AES算法加密一些文本.我的问题是,即使使用相同的加密/解密算法(AES-128)和相同的固定变量(密钥,IV,模式),我在两个平台上都会得到不同的结果.我包括来自两个平台的代码示例,我用它来测试加密/解密.我很感激在确定我做错了什么方面有所帮助.
Android代码:
public class Crypto {
private final static String HEX = "0123456789ABCDEF";
public static String encrypt(String seed, String cleartext)
throws Exception {
byte[] rawKey = getRawKey(seed.getBytes());
byte[] result = encrypt(rawKey, cleartext.getBytes());
return toHex(result);
}
public static String decrypt(String seed, String encrypted)
throws Exception {
byte[] rawKey = getRawKey(seed.getBytes());
byte[] enc = toByte(encrypted);
byte[] result = decrypt(rawKey, enc);
return new String(result);
}
private static byte[] getRawKey(byte[] seed) throws Exception {
KeyGenerator kgen = KeyGenerator.getInstance("CBC");
SecureRandom sr …Run Code Online (Sandbox Code Playgroud) 我想到了许多内部解决方案.就像在数据库中拥有属性并每隔N秒轮询它一样.然后还要检查.properties文件的时间戳修改并重新加载它.
但我正在研究Java EE标准和Spring引导文档,我似乎无法找到一些最好的方法.
我需要我的应用程序来读取属性文件(或环境变量或数据库参数),然后才能重新读取它们.生产中使用的最佳实践是什么?
一个正确的答案至少可以解决一个场景(Spring Boot或Java EE)并提供一个关于如何使其在另一个场景上工作的概念线索
java ×9
aes ×5
encryption ×5
android ×3
security ×2
cryptography ×1
decompiling ×1
iphone ×1
java-ee ×1
jce ×1
mysql ×1
passwords ×1
properties ×1
spring ×1
spring-boot ×1
store ×1