我尝试使用ibe包的主界面中的Extract()来生成私钥,这里是包的链接," https://godoc.org/v.io/x/lib/ibe#Master&#34 ;。在包中,Extract的输入是id,由{0,1} *组成,所以我首先将Mac id转换为二进制字符串,然后使用二进制字符串生成相应的私钥。 我的代码是这样的。
package main
import (
"fmt"
"v.io/x/lib/ibe"
)
var Macid = "00055DNEFF"
var id string
var PrivateKey string
func stringToBin(Macid string) (id string) {
for _, c := range Macid {
id = fmt.Sprintf("%s%b", id, c)
}
return
}
type Master string
func (master Master) Extract(id string) (PrivateKey, error) {
return PrivateKey
}
func main() {
fmt.Println("MacID is " + Macid + ", public key is" + stringToBin(Macid) + ", private key is" + ibe.Extract(id))
}
但我总是有错误
$ go build pkg.go
命令行-参数
./ pkg.go:27:PrivateKey不是类型
./ pkg.go:33:undefined:ibe in ibe.Extract
我是新生儿,我已经阅读过去的旅行,但我无法得到它。 谁能帮我这个?谢谢。
答案 0 :(得分:0)
ibe包中提供了2种Master实现(bb1和bb2)。 这些可以使用ibe.SetupBB1()或ibe.SetupBB2()
访问package main
import (
"fmt"
"log"
"v.io/x/lib/ibe"
)
var Macid = "00055DNEFF"
func stringToBin(Macid string) (id string) {
for _, c := range Macid {
id = fmt.Sprintf("%s%b", id, c)
}
return
}
func main() {
bb2Master, err := ibe.SetupBB2()
// or
// bb1Master, err := ibe.SetupBB1()
if err != nil {
log.Fatal(err)
}
id := stringToBin(Macid)
privateKey, err := bb2Master.Extract(id)
if err != nil {
log.Fatal(err)
}
fmt.Printf("MacID is %v, private key is %v", Macid, privateKey)
// etc...
// privateKey.Decrypt(C, m)
}
答案 1 :(得分:0)
@Joshua Wales
package main
import (
"fmt"
"log"
"v.io/x/lib/ibe"
)
var Macid = "00055DNEFF"
func stringToBin(Macid string) (id string) {
for _, c := range Macid {
id = fmt.Sprintf("%s%b", id, c)
}
return
}
func main() {
bb1Master, err := ibe.SetupBB1()
if err != nil {
log.Fatal(err)
}
id := stringToBin(Macid)
privateKey, err := bb1Master.Extract(id)
if err != nil {
log.Fatal(err)
}
fmt.Printf("MacID is %v, private key is %v", Macid, privateKey)
m := []byte("HelloAuthentication")
overhead := bb1Master.Params().CiphertextOverhead()
C := make([]byte, len(m)+overhead)
if err := bb1Master.Params().Encrypt(Macid, m, C); err != nil {
log.Fatal(err)
}
fmt.Printf("Ciphertext is : ", bb1Master.Params().Encrypt(Macid, m, C))
if err := privateKey.Decrypt(C, m); err != nil {
log.Fatal(err)
}
fmt.Printf("Decrypted text is : ", privateKey.Decrypt(C, m))
}
@