首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在php上加密字符串,就像java上的代码一样?

如何在php上加密字符串,就像java上的代码一样?
EN

Stack Overflow用户
提问于 2014-12-18 00:20:05
回答 1查看 185关注 0票数 1

对于一个项目,我应该在php上加密字符串,就像在java端加密代码块一样。下面是java代码。input是要加密的字符串,key是加密密钥。

代码语言:javascript
复制
    MessageDigest digest;
    try {
        digest = MessageDigest.getInstance("MD5");
        byte[] md5key = digest.digest(key.getBytes("UTF-8"));
        Cipher cipher = Cipher.getInstance("DESEDE/ECB/PKCS5Padding");
        SecretKeySpec myKey = new SecretKeySpec(md5key, "DESede");
        cipher.init(Cipher.ENCRYPT_MODE, myKey);

        try {
            byte[] encryptedPlainText = cipher.doFinal(input.getBytes());

            String encrypted = Base64.encodeToString(encryptedPlainText, 0);
            return encrypted;

        }
    }

这是我尝试加密字符串的php代码。"encryptText_3des“函数获取字符串和密钥,并返回加密字符串。

代码语言:javascript
复制
function encryptText_3des($plainText, $key) {
    $key = hash("md5", $key, true);
    $padded = pkcs5_pad($plainText, mcrypt_get_block_size(MCRYPT_3DES, MCRYPT_MODE_ECB));
    $encrypted = base64_encode(mcrypt_encrypt(MCRYPT_3DES, $key, $padded, MCRYPT_MODE_ECB));
    return $encrypted;
}

function pkcs5_pad ($text, $blocksize) 
{ 
    $pad = $blocksize - (strlen($text) % $blocksize); 
    return $text . str_repeat(chr($pad), $pad); 
}

java和php代码的输出字符串不一致。我到底漏掉了什么?

谢谢..。

EN

回答 1

Stack Overflow用户

发布于 2014-12-18 04:15:50

问题是PHP似乎使用了自己专有的键扩展机制。它不使用16字节作为DES ABA密钥(16字节),而是简单地用0值字符扩展密钥,直到它有24个字节可用作DES ABC密钥。

如果您想使用16字节密钥的DES EDE,那么您应该在密钥的末尾重复密钥的前8个字节(从MD5检索):

代码语言:javascript
复制
$key = hash("md5", $key, true);
$key = $key . substr($key, 0, 8);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27530067

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档