第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

golang中的Windows加密rdp密碼

golang中的Windows加密rdp密碼

Go
寶慕林4294392 2021-11-22 10:44:29
像http://play.golang.org/p/fD7mx2k4Ycwindow rdp 密碼加密 http://www.remkoweijnen.nl/blog/2007/10/18/how-rdp-passwords-are-encrypted/   package main    import (        "fmt"        "log"        "syscall"        "unsafe"    )    const (        CRYPTPROTECT_UI_FORBIDDEN = 0x1    )    var (        dllcrypt32  = syscall.NewLazyDLL("Crypt32.dll")        dllkernel32 = syscall.NewLazyDLL("Kernel32.dll")        procEncryptData = dllcrypt32.NewProc("CryptProtectData")        procDecryptData = dllcrypt32.NewProc("CryptUnprotectData")        procLocalFree   = dllkernel32.NewProc("LocalFree")    )    type DATA_BLOB struct {        cbData uint32        pbData *byte    }    func NewBlob(d []byte) *DATA_BLOB {        if len(d) == 0 {            return &DATA_BLOB{}        }        return &DATA_BLOB{            pbData: &d[0],            cbData: uint32(len(d)),        }    }    func (b *DATA_BLOB) ToByteArray() []byte {        d := make([]byte, b.cbData)        copy(d, (*[1 << 30]byte)(unsafe.Pointer(b.pbData))[:])        return d    }    func Encrypt(data []byte) ([]byte, error) {        var outblob DATA_BLOB        r, _, err := procEncryptData.Call(uintptr(unsafe.Pointer(NewBlob(data))), 0, 0, 0, 0, 0, uintptr(unsafe.Pointer(&outblob)))        if r == 0 {            return nil, err        }        defer procLocalFree.Call(uintptr(unsafe.Pointer(outblob.pbData)))        return outblob.ToByteArray(), nil    }    func Decrypt(data []byte) ([]byte, error) {        var outblob DATA_BLOB        r, _, err := procDecryptData.Call(uintptr(unsafe.Pointer(NewBlob(data))), 0, 0, 0, 0, 0, uintptr(unsafe.Pointer(&outblob)))        if r == 0 {            return nil, err        }        defer procLocalFree.Call(uintptr(unsafe.Pointer(outblob.pbData)))        return outblob.ToByteArray(), nil    }
查看完整描述

2 回答

?
紫衣仙女

TA貢獻(xiàn)1839條經(jīng)驗 獲得超15個贊

對上面不詳細(xì)的答案做一個補(bǔ)充。根據(jù)@Fuqiang 的回答,只需UTF-16LE在加密之前將純字符串的編碼傳輸?shù)剑涂梢粤?。所以它看起來像這樣:


....


func convertToUTF16LittleEndianBytes(s string) []byte {

    u := utf16.Encode([]rune(s))

    b := make([]byte, 2*len(u))

    for index, value := range u {

        binary.LittleEndian.PutUint16(b[index*2:], value)

    }

    return b

}


func main() {

    const secret = "MYpasswd"

    s := convertToUTF16LittleEndianBytes(secret)

    enc, err := Encrypt(s)

    if err != nil {

        log.Fatalf("Encrypt failed: %v", err)

    }

    ...

}

并且解密后,您必須utf-16le在比較或使用它之前對解密的字符串進(jìn)行解碼,不要直接將utf-16le字符轉(zhuǎn)換為字符串string(dec)。


查看完整回答
反對 回復(fù) 2021-11-22
?
BIG陽

TA貢獻(xiàn)1859條經(jīng)驗 獲得超6個贊

問題已解決。

secret = "MYpasswd"

字符串必須使用 UTF-16LE 編碼。


查看完整回答
反對 回復(fù) 2021-11-22
  • 2 回答
  • 0 關(guān)注
  • 393 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號