V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
yakczh
V2EX  ›  程序员

关于php的 des加密

  •  
  •   yakczh · 2013-12-18 14:34:45 +08:00 · 2891 次点击
    这是一个创建于 3999 天前的主题,其中的信息可能已经有所发展或是发生改变。
    <?php
    $key = "thisiskey";

    function encrypt($encrypt) {
    global $key;
    $encrypt = pkcs5_pad($encrypt);
    $iv = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_DES, MCRYPT_MODE_CBC), MCRYPT_RAND);
    $passcrypt = mcrypt_encrypt(MCRYPT_DES, $key, $encrypt, MCRYPT_MODE_CBC, $iv);
    $encode = base64_encode($passcrypt);
    return $encode;
    //return bin2hex($passcrypt);
    }

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

    echo encrypt('thisistext');
    exit;

    运行结果是 VX2gnZbjSLVU5an1Z97GIw==

    但是最后结果跟 http://www.tero.co.uk/des/code.php 上的des加密算法输出不一样
    用tero这个网址所用的代码运行
    <?php
    error_reporting(E_ALL ^E_NOTICE);
    $key = "thisiskey";
    $message = "thisistext";
    $ciphertext = des ($key, $message, 1, 0, null,'');
    echo "DES Test Encrypted: " . base64_encode ($ciphertext);

    结果 是 DES Test Encrypted: PzsmwkLug7E0Me2iHC+LHg==

    有没有高手来看一下问题出在哪里?
    2 条回复    1970-01-01 08:00:00 +08:00
    Keyes
        1
    Keyes  
       2013-12-18 17:41:20 +08:00   ❤️ 1
    PHP我看不太懂,但是就DES看来,DES CBC是8字节一个block进行加密的,要不楼主确认一下不足8字节的数据你是拿什么填充的?
    yakczh
        2
    yakczh  
    OP
       2013-12-18 21:15:14 +08:00
    @Keyes DES 加密算法中的 初始化向量 是不就是一个用来与数据异或的 数据列表?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1245 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 23:58 · PVG 07:58 · LAX 15:58 · JFK 18:58
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.