当前位置: 首页 > news >正文

扁平式风格网站农业技术推广网站

扁平式风格网站,农业技术推广网站,关于桥梁建设工程设公司网站,内容营销包括哪些内容C项目是win32的#xff0c;所以go的编译环境也要改成win32的 cmd下#xff0c;修改环境变量#xff1a; set GOARCH386 set CGO_ENABLED1 使用go env 查看是否生效参考#xff1a;https://bbs.csdn.net/topics/394513992. 2. 安装编译环境 MinGW下载安装gcc,g编译器 参考项目是win32的所以go的编译环境也要改成win32的 cmd下修改环境变量 set GOARCH386 set CGO_ENABLED1 使用go env 查看是否生效参考https://bbs.csdn.net/topics/394513992. 2. 安装编译环境 MinGW下载安装gcc,g编译器 参考https://blog.csdn.net/cbb944131226/article/details/82940273 3. 编写go相关文件和代码 编写def文件 比如我要编译的dll文件导出函数为GetIP 那么编写一个 godll.def (名字随便起) godll.def EXPORTSGetIPpackage mainimport Cimport (bytescrypto/ciphercrypto/desencoding/hexfmtiomath/randnet/httpstringstime )func EncryptDES_ECB(src, key string) string {data : []byte(src)keyByte : []byte(key)block, err : des.NewCipher(keyByte)if err ! nil {panic(err)}bs : block.BlockSize()//对明文数据进行补码data PKCS5Padding(data, bs)if len(data)%bs ! 0 {panic(Need a multiple of the blocksize)}out : make([]byte, len(data))dst : outfor len(data) 0 {//对明文按照blocksize进行分块加密//必要时可以使用go关键字进行并行加密block.Encrypt(dst, data[:bs])data data[bs:]dst dst[bs:]}return fmt.Sprintf(%X, out) }func DecryptDES_ECB(src, key string) string {data, err : hex.DecodeString(src)if err ! nil {panic(err)}keyByte : []byte(key)block, err : des.NewCipher(keyByte)if err ! nil {panic(err)}bs : block.BlockSize()if len(data)%bs ! 0 {panic(crypto/cipher: input not full blocks)}out : make([]byte, len(data))dst : outfor len(data) 0 {block.Decrypt(dst, data[:bs])data data[bs:]dst dst[bs:]}out PKCS5UnPadding(out)return string(out) }func EncryptDES_CBC(src, key string) string {data : []byte(src)keyByte : []byte(key)block, err : des.NewCipher(keyByte )if err ! nil {panic(err)}data PKCS5Padding(data , block.BlockSize())//获取CBC加密模式iv : keyByte //用密钥作为向量(不建议这样使用)mode : cipher.NewCBCEncrypter(block, iv)out : make([]byte, len(data))mode .CryptBlocks(out, data)return fmt.Sprintf(%X, out) }func DecryptDES_CBC(src, key string) string {keyByte : []byte(key)data, err : hex.DecodeString(src)if err ! nil {panic(err)}block, err : des.NewCipher(keyByte)if err ! nil {panic(err)}iv : keyByte //用密钥作为向量(不建议这样使用)mode : cipher.NewCBCDecrypter(block, iv)plaintext : make([]byte, len(data))mode.CryptBlocks(plaintext, data)plaintext PKCS5UnPadding(plaintext)return string(plaintext) }func PKCS5Padding(ciphertext []byte, blockSize int) []byte {padding : blockSize - len(ciphertext)%blockSizepadtext : bytes.Repeat([]byte{byte(padding)}, padding)return append(ciphertext, padtext...) }func PKCS5UnPadding(origData []byte) []byte {length : len(origData)unpadding : int(origData[length-1])return origData[:(length - unpadding)] }func Get(url string) string {// 超时时间5秒client : http.Client{Timeout: 5 * time.Second}resp, err : client.Get(url)defer resp.Body.Close()if err ! nil {//panic(err)//fmt.Println(err.Error())return networkError}var buffer [512]byteresult : bytes.NewBuffer(nil)for {n, err : resp.Body.Read(buffer[0:])result.Write(buffer[0:n])if err ! nil err io.EOF {break} else if err ! nil {//panic(err)result bytes.NewBuffer([]byte(networkError))}}return result.String() }//export GetIP func GetIP(signal int32, domainParam string) *C.char {defer func() {err : recover()if err ! nil {//fmt.Println(err)}}()if signal ! 8956142 { // 做一下验证防止被 恶意调用return C.CString(authError)}key : xxxxxxxwwwdomain : xxx.com//domain : xxxx.cnenc_str : EncryptDES_ECB(domain, key)httpDnsUrl : http://xxxxx/d?dn enc_str id888ttl1respTxt : Get(httpDnsUrl)if respTxt networkError {return C.CString(networkError)}descStr : DecryptDES_ECB(respTxt, key)ips_str : strings.Split(descStr, ,)[0]ips_slice : strings.Split(ips_str, ;)ips_length : len(ips_slice)if ips_length 1 {return C.CString(ips_slice[0])} else {rand.Seed(time.Now().Unix())index : rand.Intn(ips_length)return C.CString(ips_slice[index])} }func main() {}注意在要导出的函数GetIP上面 写上 //export GetIP 还要有main函数 实际上我应该将 C.CString 创建的内存释放掉。 参考 https://blog.csdn.net/weixin_34128501/article/details/91709373 https://blog.csdn.net/liangguangchuan/article/details/52920054 https://blog.csdn.net/qq_30549833/article/details/86157744 编译dll文件 go build -buildmodec-archive httpdns.go gcc godll.def httpdns.a -shared -lwinmm -lWs2_32 -o httpdns.dll -Wl,--out-implib,httpdns.lib生成 .dll .lib. h文件 用C调用 vs2017 需要用到上面的.dll 和.h #include pch.h #include iostream #include Windows.h #include stdio.h #include httpdns.h // dll的头文件 // 其中 httpdns.h里面的 //typedef __SIZE_TYPE__ GoUintptr; //typedef float _Complex GoComplex64; //typedef double _Complex GoComplex128; 这三行要注释掉// 根据httpdns.h 里面导出函数定义下面类型 typedef char*(*funcPtrGetIP)(GoInt32, GoString); using namespace std; int main() {//加载动态库HINSTANCE hInstance LoadLibrary(httpdns.dll);funcPtrGetIP pFunc_GetIP (funcPtrGetIP)GetProcAddress(hInstance, GetIP);int signal 8956142;char* domain const_castchar *(xxx.com);GoString gostr_domain{ domain,(ptrdiff_t)strlen(domain) };//就是go中的string类型char* ipstr pFunc_GetIP(signal, gostr_domain);cout strlen(ipstr) endl;cout ipstr endl;//FreeLibrary(hInstance); //release模式会崩溃原因未知return 0; }----2020-12-29---- 补充下 关于在go中使用C.String后内存需要释放的写一个释放内存的接口 /* #include stdio.h #include stdlib.h */ import C//export FreeDecryUserKey func FreeDecryUserKey(pointer *C.char) {fmt.Println(will free pointer )fmt.Println(pointer)C.free(unsafe.Pointer(pointer))//释放内存 必须引入stdlib.h 标准库 }在Cpp中这样使用 #include iostream #include string #include Windows.h #include aesdecry.h using namespace std;typedef char*(*funcPtrGetDecryUserKey)(GoString, GoString); typedef void (*funcPtrFreeDecryUserKey)(char*);int main() {std::string user_base64_key 1a07b51b220c5083ede4903cf0e1da88823e8134eb81b6a78396234a6de8d06de6f94a55d0e8762849ae58c70d436217;HINSTANCE hInstance LoadLibrary(main.dll);funcPtrGetDecryUserKey pFunc_GetDecryUserKey (funcPtrGetDecryUserKey)GetProcAddress(hInstance, GetDecryUserKey);funcPtrFreeDecryUserKey pFunc_FreeDecryUserKey (funcPtrFreeDecryUserKey)GetProcAddress(hInstance, FreeDecryUserKey);char* encry_data const_castchar *(user_base64_key.c_str());char* password const_castchar *(aa6e8b08e4db270c);GoString gostr_encry_data{ encry_data,(ptrdiff_t)strlen(encry_data) };//就是go中的string类型GoString gostr_password{ password,(ptrdiff_t)strlen(password) };//就是go中的string类型char* real_user_key pFunc_GetDecryUserKey(gostr_encry_data, gostr_password);printf(%x\n, real_user_key);printf(%p\n, real_user_key);std::string targetkey real_user_key;cout targetkey endl;pFunc_FreeDecryUserKey(real_user_key); // 释放掉内存cout targetkey endl;return 0; }
http://www.pierceye.com/news/402180/

相关文章:

  • 网站建设(信奈辉煌电商)陕西富通建设工程有限公司网站
  • 南昌县住房和城乡建设局网站外海网站如何做网站的推广
  • 重庆网站推广报价wordpress全景图
  • 做那个的网站谁有建立什么指标体系和评价程序规范
  • 新旧网站对比全国建设厅网站
  • 有经验的番禺网站建设做球服的网站有哪些
  • 临泉建设网站互联网行业都有哪些工作
  • 甘肃省嘉峪关建设局网站做游戏交易网站
  • 校园网站做自己的广告惠州网络问政平台官网
  • 网站建设使用的什么和国外做贸易用什么网站
  • 苏州自助建站模板宁波seo快速优化
  • 做网站的可行性分析网络推广渠道公司
  • 企业网站优化兴田德润优惠汕头网络营销推广该怎么做
  • 安徽省住房和建设厅网站企业网站建设硬件
  • 网站怎样运营网站文章收录
  • 怎么制作微网站wordpress 自动安装
  • 建设软件网站七台河新闻直播
  • 深圳 公司网站设计网站建设得花多少钱
  • 社交型网站首页面设计分析宁夏电建网站
  • 网站开发需要掌握的知识中国建设网官方网站
  • 制作网站素材网页设计代码步骤
  • 做微信头图的网站网页编程语言有哪几种
  • 医生工作室网站建设男女激烈做羞羞事网站网站韩剧
  • 网站里面网友点评怎么做网站开发需要资质吗
  • gta 买房网站建设中软件下载免费大全网站
  • 中国移动网站专门拍短视频的公司
  • 网站制作网站建设报价南通优化网站怎么收费
  • 网站的连接二维码怎么做wordpress.org账号
  • 优秀的网站有哪些内容wordpress重新安装删除哪个文件
  • 网站建设与发布需要什么手机端开发app