|
|
|
@ -216,7 +216,20 @@ func GenRsaKey(bits int) (prvkey, pubkey []byte, err error) {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func ParseRSAPrivateKeyFromPEM(pemData string) (*rsa.PrivateKey, error) {
|
|
|
|
|
|
|
|
var keyData = []byte(pemData)
|
|
|
|
|
|
|
|
// 解析PEM块
|
|
|
|
|
|
|
|
block, _ := pem.Decode(keyData)
|
|
|
|
|
|
|
|
if block == nil {
|
|
|
|
|
|
|
|
return nil, fmt.Errorf("private key error not block in file")
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
// 解析RSA私钥
|
|
|
|
|
|
|
|
privateKey, err := x509.ParsePKCS1PrivateKey(block.Bytes)
|
|
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
|
|
return nil, err
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
return privateKey, nil
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
func parsePrivateKey(privateKeyFile string) (*rsa.PrivateKey, error) {
|
|
|
|
func parsePrivateKey(privateKeyFile string) (*rsa.PrivateKey, error) {
|
|
|
|
// 读取私钥文件
|
|
|
|
// 读取私钥文件
|
|
|
|
@ -337,6 +350,43 @@ func RSA_Decrypts(cipherText []byte, path string) []byte {
|
|
|
|
return bytesDecrypt
|
|
|
|
return bytesDecrypt
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// RSA_DecryptsOne RSA解密支持分段解密
|
|
|
|
|
|
|
|
func RSA_DecryptsOne(cipherText []byte, privateKeyStr string) []byte {
|
|
|
|
|
|
|
|
//打开文件
|
|
|
|
|
|
|
|
var bytesDecrypt []byte
|
|
|
|
|
|
|
|
// 读取私钥文件转成字节数组
|
|
|
|
|
|
|
|
keyData := []byte(privateKeyStr)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//pem解码
|
|
|
|
|
|
|
|
block, _ := pem.Decode(keyData)
|
|
|
|
|
|
|
|
//X509解码
|
|
|
|
|
|
|
|
privateKey, err := x509.ParsePKCS8PrivateKey(block.Bytes)
|
|
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
|
|
fmt.Println(err.Error())
|
|
|
|
|
|
|
|
os.Exit(0)
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
p := privateKey.(*rsa.PrivateKey)
|
|
|
|
|
|
|
|
keySize := p.Size()
|
|
|
|
|
|
|
|
srcSize := len(cipherText)
|
|
|
|
|
|
|
|
log.Println("密钥长度", keySize, "密文长度", srcSize)
|
|
|
|
|
|
|
|
var offSet = 0
|
|
|
|
|
|
|
|
var buffer = bytes.Buffer{}
|
|
|
|
|
|
|
|
for offSet < srcSize {
|
|
|
|
|
|
|
|
endIndex := offSet + keySize
|
|
|
|
|
|
|
|
if endIndex > srcSize {
|
|
|
|
|
|
|
|
endIndex = srcSize
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
bytesOnce, err := rsa.DecryptPKCS1v15(rand.Reader, p, cipherText[offSet:endIndex])
|
|
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
|
|
return nil
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
buffer.Write(bytesOnce)
|
|
|
|
|
|
|
|
offSet = endIndex
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
bytesDecrypt = buffer.Bytes()
|
|
|
|
|
|
|
|
return bytesDecrypt
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// RsaEncryptBlock 公钥加密-分段
|
|
|
|
// RsaEncryptBlock 公钥加密-分段
|
|
|
|
func RsaEncryptBlock(src []byte, path string) (bytesEncrypt []byte, err error) {
|
|
|
|
func RsaEncryptBlock(src []byte, path string) (bytesEncrypt []byte, err error) {
|
|
|
|
//打开文件
|
|
|
|
//打开文件
|
|
|
|
@ -389,7 +439,7 @@ func RsaEncryptBlock(src []byte, path string) (bytesEncrypt []byte, err error) {
|
|
|
|
|
|
|
|
|
|
|
|
func timing(client mqtt.Client) {
|
|
|
|
func timing(client mqtt.Client) {
|
|
|
|
//定时器,10秒钟执行一次
|
|
|
|
//定时器,10秒钟执行一次
|
|
|
|
ticker := time.NewTicker(5 * time.Second)
|
|
|
|
ticker := time.NewTicker(10 * time.Second)
|
|
|
|
for {
|
|
|
|
for {
|
|
|
|
time := <-ticker.C
|
|
|
|
time := <-ticker.C
|
|
|
|
fmt.Println("定时器====>", time.String())
|
|
|
|
fmt.Println("定时器====>", time.String())
|
|
|
|
@ -424,6 +474,8 @@ func timing(client mqtt.Client) {
|
|
|
|
//decrptCode := RSA_Decrypts(decodeByte, privatePath)
|
|
|
|
//decrptCode := RSA_Decrypts(decodeByte, privatePath)
|
|
|
|
//fmt.Println("解密后的字符串:")
|
|
|
|
//fmt.Println("解密后的字符串:")
|
|
|
|
//fmt.Println(string(decrptCode))
|
|
|
|
//fmt.Println(string(decrptCode))
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
@ -445,14 +497,19 @@ var messagePubHandler mqtt.MessageHandler = func(client mqtt.Client, msg mqtt.Me
|
|
|
|
if err != nil {
|
|
|
|
if err != nil {
|
|
|
|
fmt.Println(err.Error())
|
|
|
|
fmt.Println(err.Error())
|
|
|
|
}
|
|
|
|
}
|
|
|
|
decrptCode := RSA_Decrypts(decodeByte, privatePath)
|
|
|
|
//decrptCode := RSA_Decrypts(decodeByte, privatePath)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
privateKeyPEM := `-----BEGIN PRIVATE KEY-----
|
|
|
|
|
|
|
|
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCYwvInDUICXbmWcOAR5hm86mz7WlKL3dDf12MSeIY2jm5QpUSSoMhrJOWLbOt5fXQepPaNO0M30A+3C4SFZrM/9WA5ehazO1u1m1LAkYzoSDRH3MMJsrJC3lCGDeOROteu+safuP9k/npU1YQu/+Ll2xEJNxyvUx4jLGM4LamiMI6ytM3gdnOAGP4YRQo9Etwo6I986yg/seCQC5rza9M4iBamoin7U8h9yOMKrM6xK/k9CcY/vn5+Uhe3Pvk4qj/2Ff3OXkkc1wfdILqdLwLOKL0Tb3ZciwG0p1CKO80yf5hyYoWjqZk5Rcd07nTo2gqTFGfLl9sqI9/+ipMDtnHlAgMBAAECggEATJd5yCC6lusdMRO5FOBUyUaUi9X2i1AU+RZKAynQySvSnbavUgExW58tRCHBUrGW9gJp59ft1N8J8hHhSO18NDY4H7laBlVdnwmYjRqtFo2VQO6sD4G8JRDION5f2iIxn/b2fYDI9H8vILfJRbNgtTSILyGlzTYUZzhLKxCh+8IsN96Nic8wa5COd1vZZmdhf2y8TG8clFWmozaScNSAATx7y+8XLVWjjWiIRZ6xQvx0uQPUParc9KihXXTKR2pA22yPIdz+U4MGD4kC0eczlcFKZ/dYv9e7OIGgnJfT0idSCu7nYb1pxJ1LxD9fS6IScNTF5dSe0OIL98e+XdyoAQKBgQDRep+5cW4iAKrEMH+djmcXAkoMiYtNVtnu0efLE8dP6vjYytQi368X9SdcASbfrQ31eEZmr/xQnlUF8oyHGkI38YS8dpAHzQcrkP3BljbbzB/3gJZaUdghGsDrK0xAJIzzmFKQpeKnGtr23vxUgaGrNsCYvQ0eQ7+5056KXS4r5QKBgQC6r8xtRSaje6L4WIydjWvYywsmRO0Of0aJLMDA/Wt2MWhHfh7ba9oI1cKGN80ap7xB2a9lQLgpv+C53wNtE5SpvjxsikAj96nUMMhGy9ojXrUith6HQhiINETz6Shnznd+AyrXP6KI/RpfA5nkDB5nrJxODwtYLP467IL7Cv7OAQKBgQCl4KxKdH/5fP28jYsAgJsxpSZt9xzQCU5Zxu396ZOSvUaApVyGoQpNtluMh3z48lhzYOKevgzW6gn5w69z7F8zXZT2iAxVoQ1kelP2z7RxKJrHqpNkwhqbXEwX7RlcUZUr8BqxYCqymJl7k+fMIzqaEalBSbLxnEReKi0I8/Bz4QKBgHK4b0ZCtVDHPEmimJ6E9l4dv/c/afF7swu+zaCK2ouiJvOwBCRQbYb6XPR/u/GCXASXUdpF4CX/vIhcDE3uN2/r8FO+zVWM7vbvF1OyF5WesG7pPW9e5ZZlkG3WvLa1wOZV6fCmMSo/ZwI2Q05JSDHrd43cXttLotrw1jiQ9C4BAoGBAKi4SOoOVQ5J5HQCDkBwPbG1AOLHFinzfoDl26GF/8Hy7fmmd1JiRTFldQp/A9VTAABz3sVYmMB92HSIaJhuDMoYJNI2Cf/cZifsv7vUL8cbLn+lPsKsebiuB0m0g4P2qLwLfegfNGEgA7lA5HIz3SELqbdp3iuqJeQl1fsJqD74
|
|
|
|
|
|
|
|
-----END PRIVATE KEY-----`
|
|
|
|
|
|
|
|
decrptCode := RSA_DecryptsOne(decodeByte, privateKeyPEM)
|
|
|
|
|
|
|
|
|
|
|
|
fmt.Println("解密后的字符串:")
|
|
|
|
fmt.Println("解密后的字符串:")
|
|
|
|
fmt.Println(string(decrptCode))
|
|
|
|
fmt.Println(string(decrptCode))
|
|
|
|
fmt.Println("-----user--------")
|
|
|
|
fmt.Println("-----user--------")
|
|
|
|
var user models.User
|
|
|
|
var user models.User
|
|
|
|
json.Unmarshal(decrptCode, &user)
|
|
|
|
json.Unmarshal(decrptCode, &user)
|
|
|
|
fmt.Println(user)
|
|
|
|
fmt.Println(user)
|
|
|
|
//models.SaveUser(&user)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if models.GetUser(&user) {
|
|
|
|
if models.GetUser(&user) {
|
|
|
|
models.UpdateUser(&user)
|
|
|
|
models.UpdateUser(&user)
|
|
|
|
|