在使用360搜索身份认证中有提及PHP的MCRYPT_RIJNDAEL_128加密算法,这里简单做一个示例。
360官方说明
AES对称加密(AES模式为CBC,加密算法MCRYPT_RIJNDAEL_128)对MD5加密后的密码实现对称加密。秘钥是apiSecret 的前16位,向量是后16位,加密结果为64位数字和小写字母
PHP ENCRYPTION
because of default zero padding
- AEC
- 128
- 模式CBC
- NoPadding
Nodejs
首先提供官方文档 Nodejs crypto 文档
代码
// yarn add crypto 或 npm install crypto
// 导入模块
const crypto = require('crypto');
/**
* 最终代码
* 128对应key为16位
* 256对应key为32位
*/
const cipher = crypto.createCipheriv("aes-128-cbc", key, iv);
cipher.setAutoPadding(false);
let encrypted = cipher.update(data, 'utf8', 'hex');
encrypted += cipher.final('hex');
Java
import javax.crypto
// AES对称加密(AES模式为CBC,加密算法MCRYPT_RIJNDAEL_128)
fun encode(data: String, key: String, iv: String): String {
val skeySpec = SecretKeySpec(key.toByteArray(), "AES")
val ivSpec = IvParameterSpec(iv.toByteArray())
val cipher: Cipher = Cipher.getInstance("AES/CBC/NoPadding")
cipher.init(Cipher.ENCRYPT_MODE, skeySpec, ivSpec)
val encrypted: ByteArray = cipher.doFinal(data.toByteArray())
return Hex.encodeHexString(encrypted)
}