Bartender 3 官网:https://www.macbartender.com
使用注册机前先替换公钥:
-----BEGIN PUBLIC KEY-----
MIHwMIGoBgcqhkjOOAQBMIGcAkEAraqakqaZAELLKQyPPRUKTlYunqoZqbsrP6A0
Y/k10/Fh4hSdqZrnajORjFOPUsNIiDCLMqlxqo8aK+R/gY23mQIVAKmoTu5eMxpP
c+wNxRCrLL8wfO7ZAkBcMGr4gMnFxmTRDpQknFOOjebwJ7OkVWpE9ZWMFutWcqpD
cAKfjtU1dwNK7IIt4hgytNXAExOzifrN06rY/zsbA0MAAkBdyDX92oQz9KdzyK+Q
Wqc3GA3T4sgBnjQEOL5uN5wpFdimNDJGtNly2btCRK/MbUWRi2k2P+EUqT8MCdkK
4uq8
-----END PUBLIC KEY-----
注册机源代码:
package main
import (
"bytes"
"crypto/dsa"
"crypto/rand"
"crypto/sha1"
"encoding/asn1"
"encoding/base32"
"fmt"
"golang.org/x/crypto/ssh"
"io"
"log"
"math/big"
)
var dsaPrivateKey = []byte(`-----BEGIN DSA PRIVATE KEY-----
MIH4AgEAAkEAraqakqaZAELLKQyPPRUKTlYunqoZqbsrP6A0Y/k10/Fh4hSdqZrn
ajORjFOPUsNIiDCLMqlxqo8aK+R/gY23mQIVAKmoTu5eMxpPc+wNxRCrLL8wfO7Z
AkBcMGr4gMnFxmTRDpQknFOOjebwJ7OkVWpE9ZWMFutWcqpDcAKfjtU1dwNK7IIt
4hgytNXAExOzifrN06rY/zsbAkBdyDX92oQz9KdzyK+QWqc3GA3T4sgBnjQEOL5u
N5wpFdimNDJGtNly2btCRK/MbUWRi2k2P+EUqT8MCdkK4uq8AhUApXG/mJwJMVbC
AEUTY5sz07f2XKA=
-----END DSA PRIVATE KEY-----
`)
type dsaSignature struct {
R, S *big.Int
}
func hashMessage(msg []byte) []byte {
h := sha1.New()
_, err := io.WriteString(h, string(msg))
if err != nil {
log.Fatalf("failed to hash message: %s", err)
}
return h.Sum(nil)
}
func sign(msg []byte) ([]byte, error) {
privateKey, err := ssh.ParseRawPrivateKey(dsaPrivateKey)
if err != nil {
return nil, err
}
pk, ok := privateKey.(*dsa.PrivateKey)
if !ok {
return nil, fmt.Errorf("private key should be *rsa.PrivateKey")
}
r, s, _ := dsa.Sign(rand.Reader, pk, hashMessage(msg))
signData, _ := asn1.Marshal(dsaSignature{r, s})
//fmt.Println(hex.Dump(signData))
return signData, nil
}
func base32Encode(data []byte) string {
return base32.StdEncoding.EncodeToString(data)
}
func generate(userName string) string {
// bytes.Buffer效率更高...
var b bytes.Buffer
b.Write([]byte("Bartender2,"))
b.Write([]byte(userName))
data, err := sign(b.Bytes())
if err != nil {
return ""
}
return base32Encode(data)
}
func main() {
name := "www.chinapyg.com"
fmt.Println("=================================================")
fmt.Println("「name:」" + name)
fmt.Println("「serial:」" + generate(name))
fmt.Println("=================================================")
}
发表评论