UE4 实现GM算法库过程记录

①visual studio code 打开示例项目后中文乱码问题:

乱码如图

原因:项目之前的编码方式是系统中文字符集 GB2312,但VS Code中默认的是UTF-8,两者的兼容性并不怎么好

解决方法:
右下角点击UTF-8,然后选择Reopen with Encoding,选GB2312,就能解决乱码问题


右下角
Reopen with Encoding

②UUID和GUID
UUID全称:Universally Unique Identifier,即通用唯一识别码。是一个由4个连字号(-)将32个字节长的字符串分隔后生成的字符串,总共36个字节长。比如:550e8400-e29b-41d4-a716-446655440000
GUID:是微软对UUID这个标准的实现。UUID是由开放软件基金会(OSF)定义的。UUID还有其它各种实现,不止GUID一种。

③GMSSL生成动态链接库
从GMSSL仓库拉下来的GMSSL需要生成动态链接库才能在UE4里面使用
确认已经安装ActivePerl Visual Studio NASM并且都添加到了环境变量路径里面(会用到NMake,但是Visual Studio安装自带NMake,不需要额外安装,只需要使用Developer Command Prompt命令行工具执行命令即可)

由于我要在UE4里面使用,所以我要编译64位dll,那我需要使用64位的Developer Command Prompt
perl命令后面跟Configure文件所在路径,或者命令行通过切换工作路径到我目标Configure所在文件夹
perl D:\GmSSL-master\Configure VC-WIN64A
常见问题:
①NASM not found - please read INSTALL and NOTES.WIN for further details
解决方法将NASM.exe所在目录(一般为C:\Program Files\NASM)添加到系统合用户环境变量的PATH里
②Can't locate Win32/Console.pm in @INC (you may need to install the Win32::Console module) (@INC contains: C:\Perl64\site\lib C:\Perl64\lib) at C:\Perl64\lib/ActivePerl/Config.pm line 400.
解决方法修改C:\Perl64\lib\ActivePerl\Config.pm,大约在400行左右,将该函数方法实现体注释掉

# Prevent calling Win32::Console::DESTROY on a STDOUT handle
#my $console;
sub _warn {
#    my($msg) = @_;
#    unless (-t STDOUT) {
#   print "\n$msg\n";
#   return;
#    }
#    require Win32::Console;
#    unless ($console) {
#   $console = Win32::Console->new(Win32::Console::STD_OUTPUT_HANDLE());
#    }
#    my($col,undef) = $console->Size;
#    print "\n";
#    my $attr = $console->Attr;
#    $console->Attr($Win32::Console::FG_RED | $Win32::Console::BG_WHITE);
#    for (split(/\n/, "$msg")) {
#   $_ .= " " while length() < $col-1;
#   print "$_\n";
#    }
#    $console->Attr($attr);
#    print "\n";
}

执行
nmake
,开始刷屏
刷屏结束后
nmake install
但会有问题,所以直接将弄好的dll放上来,希望不会吞
https://1drv.ms/u/s!AnIe0YG57kxNmCvZAMV0LCHmhWVx?e=H5nH9k
然后是使用这个dll的文档
https://1drv.ms/w/s!AnIe0YG57kxNmH0ZAY_uvuAooUSI?e=bxqoNf

④UE4创建第三方库插件,添加UObject出现Cannot open include file: 'UObject/NoExportTypes.h',解决方法:没有引入CoreUObject模块,在你插件的Build.cs的PublicDependencyModuleNames添加相应的CoreUObject模块,顺便把Engine和InputCore也添加上,这些都很常用。
另外,如果用了lib,最好把lib要用的头文件放在插件的Public文件夹里面,然后在你插件的头文件里面include这个lib的头文件。同样地,一些常用的头文件也可以在插件的头文件里面include,这样很多时候就只需要include插件的头文件不用在cpp里面额外去再include。
⑤UStruct UEnum 的声明,一般会在Public文件夹里面新建一个头文件然后去编辑,这个头文件有格式的要求:
首先要有#pragma once ,如果这个文件里面声明了UStruct,则必须要Include它的generated.h,同时记得UStruct里面要GENERATED_USTRUCT_BODY()
⑥.puk密钥文件,广发的公钥.puk文件读取公钥方法就是直接将.puk文件读到字节数组里面,然后将字节数组转换成16进制字符串,截取字符串的后面128个字符
⑦ue4内置有md5算法,但是和php的算法有不一样的地方,php的md5算法,一般是先将hex字符串转到字节数组,然后再将字节数组转md5,而UE4是直接将hex字符串转asc码然后转md5,这是需要注意的地方。同样地,base64也是一样的操作,要想和php的一样,就需要先将hex字符串转字节数组然后再进行base64加密
⑧智能指针,用来避免发生内存泄漏很方便,但还是要注意会发生数组指针类型取成员超出了数组范围导致的错误
⑩身份证验证,常用的身份证验证,参考了

https://jingyan.baidu.com/article/6b97984db00e9a1ca3b0bf5f.html

里面java的写法,将算法写到了蓝图里面,原理是身份证的第18位是校验位,身份证的前17位通过加权计算后%11的值通过选取,将会和校验位的值相等。
*17位的加权值分别为7、9、10、5、8、4、2、1、6、3、7、9、0、5、8、4、2
*%11后余数选取,从0开始到11分别是1、0、x、9、8、7、6、5、4、3、2

你可能感兴趣的:(UE4 实现GM算法库过程记录)