MrJ*_*rJM 3 encryption groovy android gradle android-gradle-plugin
对于 Android 应用程序,我想在使用 gradle 构建时混淆/加密服务器公钥。
现在我正在使用 Base64 进行混淆,但我需要 AES 作为额外的
task encryptKeys {
doFirst {
//Encrypt the server key
// Load key
byte[] key = new File('project/keys/server.crt.der').bytes
// Encode key twice
String encoded = key.encodeBase64().toString();
encoded = encoded.bytes.encodeBase64().toString();
//TODO AES ENCRYPTION HERE
// Save key
new File('project/src/main/assets/server.crt.der').bytes = encoded.getBytes()
Run Code Online (Sandbox Code Playgroud)
稍后在运行时使用此密钥时,我会像这样解密它
public static String decrypt(byte[] cipherText) throws Exception{
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding", "BC");
SecretKeySpec key = new SecretKeySpec(encryptionKey.getBytes("UTF-8"), "AES");
cipher.init(Cipher.DECRYPT_MODE, key, new IvParameterSpec(IV.getBytes("UTF-8")));
return new String(cipher.doFinal(cipherText),"UTF-8");
}
Run Code Online (Sandbox Code Playgroud)
在 gradle 脚本中使用 AES 加密我的密钥的正确方法是什么?谷歌帮不了我。这是可能的,还是我需要找到另一种解决方案?
这里有一个类似的问题,用于在 Java 中使用 AES 加密字符串。
我已将其采用到下面的 gradle 脚本中。
它将SERVERKEY使用密钥加密字符串(在您的版本中从外部源加载它)KEY。我没有安装 BouncyCastle,所以我使用了 SunJCE,但我将它作为参数保留,以便您可以轻松更改它。
这种简单情况下的输出是文件“obf.enc”。该decIt任务还将解密并打印出来以显示它是对称工作的。
你最难的部分显然是你KEY的加密嵌入在你的应用程序中(因此我在评论中提出了问题),所以这只是通过默默无闻的安全性,但如果这对应用程序来说足够好,那就这样吧。
import javax.crypto.spec.IvParameterSpec
import javax.crypto.spec.SecretKeySpec
import javax.crypto.Cipher
ext {
KEY = "mysecretkey".padRight(16).getBytes("UTF-8")
SERVERKEY = "serverkey"
IV = "1234".padRight(16).getBytes("UTF-8")
PROVIDER = "SunJCE"
}
task encIt << {
SecretKeySpec key = new SecretKeySpec(KEY, "AES")
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding", PROVIDER)
cipher.init(Cipher.ENCRYPT_MODE, key, new IvParameterSpec(IV))
def encBytes = cipher.doFinal(SERVERKEY.bytes)
def out = file('obf.enc')
out.delete()
out << encBytes
}
task decIt << {
def cipherText = file('obf.enc').bytes
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding", PROVIDER)
SecretKeySpec key = new SecretKeySpec(KEY, "AES")
cipher.init(Cipher.DECRYPT_MODE, key, new IvParameterSpec(IV))
println new String(cipher.doFinal(cipherText), "UTF-8")
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2942 次 |
| 最近记录: |