把php的加密算法转为go语言

php的代码

function encrypt($data, $key)
{
    $key    =    md5($key);
    $x        =    0;
    $len    =    strlen($data);
    $l        =    strlen($key);
    for ($i = 0; $i < $len; $i++)
    {
        if ($x == $l) 
        {
            $x = 0;
        }
        $char .= $key{$x};
        $x++;
    }
    for ($i = 0; $i < $len; $i++)
    {
        $str .= chr(ord($data{$i}) + (ord($char{$i})) % 256);
    }
    return base64_encode($str);
}

go的代码


func MD5(p string) (v string) {
    h := md5.New()
    h.Write([]byte(p))
    v = hex.EncodeToString(h.Sum(nil))
    return
}

func Encrypt(password string) string {
    key := MD5("")
    x := 0
    length := len(password)
    l := len(key)
    char := ""
    str := ""
    for i := 0; i < length; i++ {
        if x == l {
            x = 0
        }
        char = char + string(key[x])
        x++
    }
    for i := 0; i < length; i++ {
        str += string(rune(password[i]) + rune(char[i])%256)
    }
    return base64.StdEncoding.EncodeToString([]byte(str))
}

加密字符为: 12345678
php结果为: lWZkmG2Zm3E=
go结果为: wpVmZMKYbcKZwptx

go代码: https://play.golang.org/p/fzrv79Vb5F2
php代码: http://www.dooccn.com/php/#id/85728211cb611f356245f570b481ca1c

go的应该怎么改才能和php的结果一致?

阅读 2.6k
1 个回答

已解决:

func Encrypt(password string) string {
    key := MD5("")
    x := 0
    length := len(password)
    l := len(key)
    var char []byte
    var str []byte
    for i := 0; i < length; i++ {
        if x == l {
            x = 0
        }
        char = append(char, key[x])
        x++
    }
    for i := 0; i < length; i++ {
        ch := rune(password[i]) + rune(char[i])%256
        str = append(str, byte(ch))
    }
    return base64.StdEncoding.EncodeToString(str)
}

代码: https://play.golang.org/p/7EU...

php和go的string还是有点区别的。。。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题