Go package wincred 在将密码从 []byte 转换为字符串时添加空格
Go package wincred adding spaces when converting password from []byte to string
我正在使用 Windows 凭据管理器为我内置的应用程序存储数据库凭据通过 wincred package。
它适用于检索由包本身创建的凭据的密码,但是对于直接通过 Windows 凭据管理器创建的凭据,包在字符之间添加 "spaces"(字节“0”)当从 []byte 转换为 string.
//Retrieve a credential object
package main
import (
"fmt"
"github.com/danieljoos/wincred"
)
func main() {
cred, err := wincred.GetGenericCredential("myGoApplication")
if err == nil {
fmt.Println(string(cred.CredentialBlob))
}
}
在上面的示例中,我将 "myGoApplication" 的密码设置为 123456,但它检索为
1 2 3 4 5 6
[]字节表示为
[49 0 50 0 51 0 52 0 53 0 54 0]
我想知道是否有人知道可能导致此问题的原因。
返回的结果类似于UTF-16。
wincred
的 UTF-16 转换工作正常吗?很高兴与作者确认。
作为一种变通方法,我删除了暂时适合我的目的的空字节,但这不太可能是正确的解决方案。
bytes.Replace(myBytes, []byte("[=10=]0"), nil, -1)
我正在使用 Windows 凭据管理器为我内置的应用程序存储数据库凭据通过 wincred package。
它适用于检索由包本身创建的凭据的密码,但是对于直接通过 Windows 凭据管理器创建的凭据,包在字符之间添加 "spaces"(字节“0”)当从 []byte 转换为 string.
//Retrieve a credential object
package main
import (
"fmt"
"github.com/danieljoos/wincred"
)
func main() {
cred, err := wincred.GetGenericCredential("myGoApplication")
if err == nil {
fmt.Println(string(cred.CredentialBlob))
}
}
在上面的示例中,我将 "myGoApplication" 的密码设置为 123456,但它检索为
1 2 3 4 5 6
[]字节表示为
[49 0 50 0 51 0 52 0 53 0 54 0]
我想知道是否有人知道可能导致此问题的原因。
返回的结果类似于UTF-16。
wincred
的 UTF-16 转换工作正常吗?很高兴与作者确认。
作为一种变通方法,我删除了暂时适合我的目的的空字节,但这不太可能是正确的解决方案。
bytes.Replace(myBytes, []byte("[=10=]0"), nil, -1)