资讯专栏INFORMATION COLUMN

【转载】PHP android ios相互兼容的AES加密算法

JessYanCoding / 2696人阅读

摘要:项目用户密码传输一直没有用,考虑到用户的隐私暂时先用对密码加密,以后也可以用于手机端与服务端加密交互。的免费版项目,手机端解码各种不对。好不容易找了,相互加解密正常的加密算法代码。的加密算法的加密算法的加密算法参考

APP项目用户密码传输一直没有用HTTPS,考虑到用户的隐私暂时先用AES对密码加密,以后也可以用于手机端与服务端加密交互。

PHP的免费版phpAES项目,手机端解码各种不对。

好不容易找了PHP ANDROID IOS,相互加解密正常的AES加密算法代码。

PHP的AES加密算法:

key = hash("sha256", $this->key, true);

        //echo $this->key."
"; } function encrypt($str) { $td = mcrypt_module_open(MCRYPT_RIJNDAEL_128, "", MCRYPT_MODE_CBC, ""); mcrypt_generic_init($td, $this->key, $this->hexToStr($this->hex_iv)); $block = mcrypt_get_block_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC); $pad = $block - (strlen($str) % $block); $str .= str_repeat(chr($pad), $pad); $encrypted = mcrypt_generic($td, $str); mcrypt_generic_deinit($td); mcrypt_module_close($td); return base64_encode($encrypted); } function decrypt($code) { $td = mcrypt_module_open(MCRYPT_RIJNDAEL_128, "", MCRYPT_MODE_CBC, ""); mcrypt_generic_init($td, $this->key, $this->hexToStr($this->hex_iv)); $str = mdecrypt_generic($td, base64_decode($code)); $block = mcrypt_get_block_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC); mcrypt_generic_deinit($td); mcrypt_module_close($td); return $this->strippadding($str); } /* For PKCS7 padding */ private function addpadding($string, $blocksize = 16) { $len = strlen($string); $pad = $blocksize - ($len % $blocksize); $string .= str_repeat(chr($pad), $pad); return $string; } private function strippadding($string) { $slast = ord(substr($string, -1)); $slastc = chr($slast); $pcheck = substr($string, -$slast); if (preg_match("/$slastc{" . $slast . "}/", $string)) { $string = substr($string, 0, strlen($string) - $slast); return $string; } else { return false; } } function hexToStr($hex) { $string=""; for ($i=0; $i < strlen($hex)-1; $i+=2) { $string .= chr(hexdec($hex[$i].$hex[$i+1])); } return $string; } } $encryption = new MCrypt(); echo $encryption->encrypt("123456") . "
"; echo $encryption->decrypt("tpyxISJ83dqEs3uw8bN/+w=="); ?>

java的AES加密算法:

import javax.crypto.Cipher;

import javax.crypto.spec.IvParameterSpec;

import javax.crypto.spec.SecretKeySpec;

import android.util.Base64;

/**

 * @author vipin.cb , vipin.cb@experionglobal.com 
* Sep 27, 2013, 5:18:34 PM
* Package:- com.veebow.util
* Project:- Veebow *

*/ public class AESCrypt { private final Cipher cipher; private final SecretKeySpec key; private AlgorithmParameterSpec spec; public static final String SEED_16_CHARACTER = "U1MjU1M0FDOUZ.Qz"; public AESCrypt() throws Exception { // hash password with SHA-256 and crop the output to 128-bit for key MessageDigest digest = MessageDigest.getInstance("SHA-256"); digest.update(SEED_16_CHARACTER.getBytes("UTF-8")); byte[] keyBytes = new byte[32]; System.arraycopy(digest.digest(), 0, keyBytes, 0, keyBytes.length); cipher = Cipher.getInstance("AES/CBC/PKCS7Padding"); key = new SecretKeySpec(keyBytes, "AES"); spec = getIV(); } public AlgorithmParameterSpec getIV() { byte[] iv = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; IvParameterSpec ivParameterSpec; ivParameterSpec = new IvParameterSpec(iv); return ivParameterSpec; } public String encrypt(String plainText) throws Exception { cipher.init(Cipher.ENCRYPT_MODE, key, spec); byte[] encrypted = cipher.doFinal(plainText.getBytes("UTF-8")); String encryptedText = new String(Base64.encode(encrypted, Base64.DEFAULT), "UTF-8"); return encryptedText; } public String decrypt(String cryptedText) throws Exception { cipher.init(Cipher.DECRYPT_MODE, key, spec); byte[] bytes = Base64.decode(cryptedText, Base64.DEFAULT); byte[] decrypted = cipher.doFinal(bytes); String decryptedText = new String(decrypted, "UTF-8"); return decryptedText; } }

IOS的AES加密算法:

https://github.com/Gurpartap/...

stackoverflow参考
http://stackoverflow.com/ques...

http://stackoverflow.com/ques...

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/22617.html

相关文章

  • 【JAVA】AES加密 简单实现 AES-128/ECB/PKCS5Padding

    摘要:加密是一种可逆加密算法,对用户的敏感信息加密处理。加密错误返回获取加密密文字节数组对密文字节数组进行转换为输出密文返回输出密文加密错误返回解密密文,带解密的内容密码,解密的密码返回明文,解密后得到的内容。 AES加密 AES 是一种可逆加密算法,对用户的敏感信息加密处理。 本文暂不深入AES原理,仅关注JAVA代码实现AES加解密。 JAVA代码实现 在用JAVA实现AES加密前,先浏...

    sourcenode 评论0 收藏0
  • 最佳安全实践:在 Java 和 Android 中使用 AES 进行对称加密:第2部分:AES-CB

    摘要:如何解决这个问题正如我在上一篇文章中所说的那样,一种可能的解决方案是将加密原语组合在一起以包含加密验证码。但是,这些原语通常在所有环境中都可用,因此它可能是你唯一的选择。 本文是我上一篇文章:最佳安全实践:在 Java和 Android 中使用 AES 进行对称加密 的续篇,在这篇文章中我总结了关于 AES 最为重要的事情并演示了如何通过 AES-GCM 来使用它。在阅读本文并深入下一...

    Ververica 评论0 收藏0
  • 鹅厂干货 | 腾讯游戏APP协议迭代那些事

    摘要:本文则主要总结了心悦俱乐部的接入层从文本协议到二进制协议迭代过程中的技术方案,包括协议规范安全性等方面的内容。在心悦的文本协议方案中,采用的是对请求数据进行模式的加密。包括明文的协议包头和密文的二进制流。 欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~。 作者:罗广镇 | 腾讯移动开发工程师 App与后台通信通常有采用json等文本协议或者采用二进制协议,本文则主要总结了心...

    luck 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<