gpt4 book ai didi

php - android 中的 Base64 和 mcrypt_encrypt

转载 作者:行者123 更新时间:2023-11-29 14:16:02 25 4
gpt4 key购买 nike

我需要在 android 中使用 key 对特定文本进行加密。在 PHP 中,加密代码如下所示

$this->securekey = hash('sha256',$textkey,TRUE);
$this->iv = mcrypt_create_iv(32, MCRYPT_DEV_URANDOM);
return base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $this->securekey, $input, MCRYPT_MODE_ECB, $this->iv));

对于 Base64,我在 Netbeans 中为我的 Android 应用程序添加了来自 apache.org (commons-codec-1.6.jar) 的公共(public)编解码器。代码中没有错误。但是当我运行应用程序并调用使用编解码器的函数时,应用程序停止并需要提前关闭。

在 logCat 中说:

Android Runtime: java.lang.NoSuchMethodError: 
org.apache.commons.codec.binary.Base64.decodeBase64

这是我的代码:

public static String crypt(String input, String key){
byte[] crypted = null;
try{
SecretKeySpec skey = new SecretKeySpec(org.apache.commons.codec.binary.Base64.decodeBase64(key), "AES");
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, skey);
crypted = cipher.doFinal(input.getBytes());
}catch(Exception e){
}
return org.apache.commons.codec.binary.Base64.encodeBase64String(crypted);
}

我不确定我的代码是否与 PHP 代码进行了相同的加密。我找到了这个链接 http://www.androidsnippets.com/encrypt-decrypt-between-android-and-php在 Android 和 PHP 之间,但它不使用 Base64,仅用于 mcrypt_encrypt。任何人都可以帮助我获得与 PHP 服务器相同的加密。

提前致谢。

最佳答案

您的错误仅仅是因为您忘记将 Apache 编解码器库添加到您的运行时环境。仅仅针对它进行编译是不够的;该库需要实际存在在 Android 设备上。

您无法使用默认 Java 库在 Android 上获得相同的加密,您可能需要 Bouncy CaSTLe 库。您示例中的 PHP 代码使用 block 大小为 32 字节的 Rijndael。 AES 是 Rijndael 的子集, block 大小为 16 字节。这在 PHP mcrypt 中称为 MCRYPT_RIJNDAEL_128

一些其他的实现细节:

  • ECB 不使用 IV(到目前为止,我已经用更好的东西替换了默认的 mcrypt_encrypt 样本);
  • mcrypt_encrypt 不执行 PKCS5Padding,我认为它使用空格;
  • input.getBytes()不可移植,它使用平台默认编码,可能与PHP编码不同;

最后是一些安全警告:

  • 仅对密码使用 SHA-256 被认为是不安全的,请使用 PBKDF2;
  • ECB 被认为是不安全的,使用 CBC;
  • MCRYPT_DEV_URANDOM 不安全(这基本上意味着 PHP 加密毫无值(value),您最好使用 PHP openssl 包装器);

祝你好运!

关于php - android 中的 Base64 和 mcrypt_encrypt,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12087288/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com