首页 algorithm

将laravel中hash加密方式在go中怎么实现

发布于: 2024-07-10

我们经常使用laravel中的hash进行对数据进行加密,下面我们将laravel中的方法转变成go中的方法

驱动使用默认的 bcrypt

生成

1
2
3
4
5
\Illuminate\Support\Facades\Hash::make("123456")
会产生随机字符串并不是固定值
// $2y$10$ozKiyZy7eudP64XhJHqSfu1PkviK0Ahg2348iX0cDDUKnw9r8pwLO

// $2y$10$VH1VZUo32vNzm1AsoU0qXO14hkp61O1TfL9M1wDiWXOg1QPoisnbO

在看看go怎么实现

1
2
3
4
5
hashedValue, _ := bcrypt.GenerateFromPassword([]byte("123456"), bcrypt.DefaultCost)
fmt.Print(string(hashedValue))

// $2a$10$2W9wylmq3GaxUQBfdfCTYeJitxJfRuz6xJKRD2A/L/Zs8BUriiJJS
// $2a$10$kKAS.WmPwLBAKLQQifEx6.LIlgHBEHzAa.oaMV/UuMcmwRNdENEU2

验证

1
2
3
4
5
6
7
8
9
\Illuminate\Support\Facades\Hash::check("123456",'$2y$10$ozKiyZy7eudP64XhJHqSfu1PkviK0Ahg2348iX0cDDUKnw9r8pwLO')
// true
\Illuminate\Support\Facades\Hash::check("123456",'$2y$10$VH1VZUo32vNzm1AsoU0qXO14hkp61O1TfL9M1wDiWXOg1QPoisnbO')
// true

\Illuminate\Support\Facades\Hash::check("123456",'$2a$10$2W9wylmq3GaxUQBfdfCTYeJitxJfRuz6xJKRD2A/L/Zs8BUriiJJS')
// true
\Illuminate\Support\Facades\Hash::check("123456",'$2a$10$kKAS.WmPwLBAKLQQifEx6.LIlgHBEHzAa.oaMV/UuMcmwRNdENEU2')
// true

在看看go怎么实现

1
2
3
4
5
6
7
8
9
10
11
12
13
var err error
err = bcrypt.CompareHashAndPassword([]byte("$2y$10$ozKiyZy7eudP64XhJHqSfu1PkviK0Ahg2348iX0cDDUKnw9r8pwLO"), []byte("123456"))
fmt.Println(err)
// nil
err = bcrypt.CompareHashAndPassword([]byte("$2y$10$VH1VZUo32vNzm1AsoU0qXO14hkp61O1TfL9M1wDiWXOg1QPoisnbO"), []byte("123456"))
fmt.Println(err)
// nil
err = bcrypt.CompareHashAndPassword([]byte("$2a$10$2W9wylmq3GaxUQBfdfCTYeJitxJfRuz6xJKRD2A/L/Zs8BUriiJJS"), []byte("123456"))
fmt.Println(err)
// nil
err = bcrypt.CompareHashAndPassword([]byte("$2a$10$kKAS.WmPwLBAKLQQifEx6.LIlgHBEHzAa.oaMV/UuMcmwRNdENEU2"), []byte("123456"))
fmt.Println(err)
// nil

为nil 相当于就是true