mirror of
				https://github.com/bjdgyc/anylink.git
				synced 2025-11-04 11:06:22 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			41 lines
		
	
	
		
			796 B
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			41 lines
		
	
	
		
			796 B
		
	
	
	
		
			Go
		
	
	
	
	
	
package utils
 | 
						|
 | 
						|
import (
 | 
						|
	"crypto/rand"
 | 
						|
	"encoding/base64"
 | 
						|
	mt "math/rand"
 | 
						|
 | 
						|
	"golang.org/x/crypto/bcrypt"
 | 
						|
)
 | 
						|
 | 
						|
func PasswordHash(password string) (string, error) {
 | 
						|
	bytes, err := bcrypt.GenerateFromPassword([]byte(password), bcrypt.DefaultCost)
 | 
						|
	return string(bytes), err
 | 
						|
}
 | 
						|
 | 
						|
func PasswordVerify(password, hash string) bool {
 | 
						|
	err := bcrypt.CompareHashAndPassword([]byte(hash), []byte(password))
 | 
						|
	return err == nil
 | 
						|
}
 | 
						|
 | 
						|
// $sha-256$salt-key$hash-abcd
 | 
						|
// $sha-512$salt-key$hash-abcd
 | 
						|
const (
 | 
						|
	saltSize = 16
 | 
						|
	delmiter = "$"
 | 
						|
)
 | 
						|
 | 
						|
func RandSecret(min int, max int) (string, error) {
 | 
						|
	rb := make([]byte, randInt(min, max))
 | 
						|
	_, err := rand.Read(rb)
 | 
						|
	if err != nil {
 | 
						|
		return "", err
 | 
						|
	}
 | 
						|
 | 
						|
	return base64.URLEncoding.EncodeToString(rb), nil
 | 
						|
}
 | 
						|
 | 
						|
func randInt(min int, max int) int {
 | 
						|
	return min + mt.Intn(max-min)
 | 
						|
}
 |