Python 实现国产SM3加密算法

SM3由国家密码管理局于2010年12月17日发布。主要用于报告文件数字签名及验证。

Python3代码如下:

参考链接


Python 实现国产SM3加密算法

解决Visual Studio Code在Raspberry Pi 4运行特别缓慢的问题

在树莓派4通过命令行安装 Visual Studio Code 如下:

但是运行特别缓慢,调试 Python 代码会持续卡住,CPU 长时间 100% 占用。

目前一个可用的办法就是在 Visual Studio Code 中禁用 GPU 加速。

具体操作如下:

  • Open Visual Studio Code
  • Open the Command Palette by hitting your F1 key or the key combo Ctrl+Shift+P
  • Begin typing runtime and you should see “Preferences: Configure Runtime Arguments” appear (Pictured below). Click it or hit Enter to open a configuration file called argv.json which allows us to set runtime arguments.

  • There should be the line "disable-hardware-acceleration": true, commented out. (Pictured below)

  • Uncomment the line by deleting the preceding // or add the line if it is missing entirely.
    Tip: Be careful not forget the comma if the line is not the last uncommented one inside the curly braces.

  • Save the file and restart Visual Studio Code for the change to take effect.

参考链接


Python-使用U盾完成数据的加解密(国密算法SKF接口)

如果身边有银行的U盾,或者其他Ukey产品,可以使用这些产品完成对数据的加解密,针对个人的敏感数据进行加密处理。

1-涉及的内容
  • 使用的python库:ctypes 作用:

是Python的外部函数库。提供与 C语言兼容的数据类型,并允许调用 DLL 或共享库中的函数。

  • 使用的Ukey:文鼎创的一款Key。

与Ukey使用会有配套的驱动程序(管理工具),安装之后会在【C:\Windows\System32】释放对应dll库文件,使用ctypes库调用这个dll文件。

  • dll的接口函数

现在各厂家的Ukey一般都支持国密算法(SKF),使用SKF中的函数,实现数据的加解密。了解到文鼎创这边提供的SKF的函数中有使用ECC非对称算法完成数据加解密。本文内容就是用里面的ECC算法完成数据分非对称加解密。

2-动态库涉及的函数及结构体
2.1 相关结构体

ECC公钥结构

C中的结构体声明:

Python的ctype库声明:

密文数据结构

C中的结构体声明:

Python的ctype库声明:

2.2 相关函数

3-Python实现

要求:Ukey中有SM2容器,使用SM2加密密钥对,且默认在第一个容器名中,如果不是,请自行修改。

实现内容:

  • 使用ctype先定义好所需要到的结构体

  • 创建一个类,实现加解密的过程

    • 在类中在初始化中初始化句柄
    • 在对象结束的时候释放掉对应的句柄
    • 将句柄的获取放在一个函数中,获取句柄。
    • 将加密结果转换为Hex字符串形式。
    • 传入Hex密文字符进行解密。

  • 辅助函数:

    • def __IntList_ToHexStr(self, int_list):将int类型的列表转为Hex字符串
    • def __HexStr_ToIntList(self, str_hex):Hex字符串转为int类型的列表
    • def StrHex_ToCipherText(self, str_hex):Hex密文字符串转为密文结构体
    • def CipherText_ToStrHex(self, cipher_text):将密文结构体转为Hex密文字符串
  • 主要函数:

    • def ECCEncrypt(self, plain_text):返会的是密文结构类型数据
    • def ECCEncrypt_Hex(self, plain_text):返会的是密文Hex字符串
    • def ECCDecrypt(self, cipher_text):传入密文结构体进行解密
    • def ECCDecrypt_Hex(self, cipher_hex):传入密文Hex字符串进行解密
    • def VerifyPIN(self, user_pin):验证UkeyPIN
  • 其他函数:获取句柄相关,比较简单。

完整代码

4-测试结果

继续阅读Python-使用U盾完成数据的加解密(国密算法SKF接口)

Error: Gradle build failed to produce an .apk file. It's likely that this file was generated under /xxxx/build, but the tool couldn't find it.

Flutter 升级到 3.27.3 版本,然后升级 Android 构建工具到最新的 AGP 8.8.0 版本,然后编译报错:

于是在项目的配置文件中寻找配置 "build" 目录的地方,于是在 Flutter 项目的 Android 工程根目录下找到,如下:

注意 getLayout().setBuildDirectory('../build') ,以前的 Gradle 版本是可以正常编译的,现在的版本需要需要改为 rootProject.buildDir = "../build" 。

修改后的结果如下:

解决OpenSCAD导出的WRL格式文件不正确的问题

前置条件

  • macOS Sequoia (15.2) 
  • MacBook Pro 2023-Apple M2 Pro (4能效核、8性能核、32GB内存、2TB磁盘)
  • OpenSCAD 2025.02.03 (或更高版本)
  • FreeCAD 1.0.0 (或更高版本)
  • KiCad 8.0.8 (或更高版本)
  • MeshLab 2023.12 (或更高版本)
  • Wings 3D 2.4.1 (或更高版本)

问题描述

在文章 KiCad-V8.0.8 制作收音机中周(中频变压器)封装 中,我们讨论了如何借助 OpenSCAD 2024.12.13 创建 KiCAD 需要的器件 3D 模型 的过程。

接下来,由于 PCB 板大小的限制,我们需要对部分电阻进行垂直安装,以节约 PCB 面积。可是 KiCAD 自带的电阻 3D模型 都是水平放置的,没有相关的垂直放置模型。这样就迫使我们必须创建电阻的自定义3D模型

于是我们通过借助 NopSCADlib 绘制电阻的垂直封装,具体代码如下:

渲染效果如下图:

问题现象

当我们使用 FreeCAD 导入这个模型的时候,会发生如下报错:

继续阅读解决OpenSCAD导出的WRL格式文件不正确的问题

解决Mac安装软件的“已损坏,无法打开。 您应该将它移到废纸篓”问题

前置条件

  • macOS Sequoia (15.2) 
  • MacBook Pro 2023-Apple M2 Pro (4能效核、8性能核、32GB内存、2TB磁盘)
  • FreeCAD_weekly-builds-39896-conda-macOS-arm64-py311

问题现象

FreeCAD 下载每周构建版本,则在安装后会报错“已损坏,无法打开。 您应该将它移到废纸篓”,类似下图:

继续阅读解决Mac安装软件的“已损坏,无法打开。 您应该将它移到废纸篓”问题

更新OpenWRT系统中的所有软件包

在OpenWRT设备上,可以通过以下两种命令来更新系统所有软件包:

仅更新LuCI相关的软件包(Web管理界面):

更新所有可升级的软件包(包括系统内核和其他组件):

为什么要更新OpenWRT软件包?

保持OpenWRT系统及其软件包的最新版本,不仅能让系统享有最新的功能和性能优化,还能显著提高设备的安全性。每一次更新,通常都包含以下内容:

  • 安全补丁:随着时间的推移,可能会发现系统中的安全漏洞。更新能够及时修复这些漏洞,避免设备受到攻击。

  • 功能改进:新的软件包版本往往带来新功能,或改进现有功能,让系统更加易用和强大。

  • 性能优化:定期更新不仅能修复Bug,还能提升系统的性能,使网络设备运行更加流畅。

  • 兼容性和稳定性:更新可能包含对硬件和软件兼容性的提升,减少运行中出现的问题,保持系统的长期稳定性。

    更新命令的使用方法:

    本文将从最基本的更新软件包源开始,接着详细介绍两种可供选择的升级方式——只更新LuCI相关组件或更新所有软件包。用户可以根据需求选择相应的命令。

第一步:更新软件包源

无论你打算只更新LuCI相关的组件,还是更新整个系统,首先都需要刷新软件包源列表。这一步可以确保系统从最新的软件包存储库中获取信息,并知道哪些软件包有更新可用。

详细解释:

opkg update:这个命令不会直接升级软件包,而是更新系统的软件包源列表。它会连接到OpenWRT的软件包存储库,获取最新的包信息,包括版本号、依赖关系等。执行完这个命令后,设备将知道哪些软件包可以升级,从而为后续的升级操作做好准备。

选择1:仅更新LuCI相关的软件包

如果你只想更新LuCI Web管理界面和相关插件,而不想影响其他系统组件,可以使用以下命令:

详细解释:

  • opkg list-upgradable:列出当前系统中所有可以升级的软件包及其版本信息。输出内容通常会包括包名、当前安装版本和最新可用版本。

    例如:

    这表示 luci-app-firewall 和 luci-base 都有新版本可以升级。

  • grep luci-:筛选出所有以 “luci-” 开头的软件包。LuCI相关的所有软件包名称通常都以“luci-”开头,如 luci-base、luci-app-firewall 等。因此,这个命令确保只筛选和更新LuCI相关的软件包。

  • cut -f 1 -d ' ':将筛选结果中的包名提取出来,忽略版本信息。输出的内容会类似于:

  • xargs opkg upgrade:xargs 是用于将前面筛选出的包名传递给 opkg upgrade 命令的工具。它将每个包名作为参数传递给 opkg upgrade,然后逐个升级这些包。

    使用场景:

    如果你只关心Web界面和相关管理功能的升级,而其他系统组件都不需要更改,可以选择这种方法。这可以减少升级的范围,降低更新过程中出现问题的风险。

    选择2:更新所有可升级的软件包

    如果你希望更新系统中所有的软件包,包括内核、应用程序、以及网络相关工具,可以使用以下命令:

    详细解释:

    • opkg list-upgradable:与前面一样,用于列出所有可以升级的软件包。它会显示每个软件包的名称及其版本更新信息。

    • cut -f 1 -d ' ':这条命令将所有软件包名称提取出来,去掉版本信息。和前面的命令类似,它将结果简化为只有包名。

    • xargs opkg upgrade:这一步是将所有提取出的包名传递给 opkg upgrade 命令,然后逐一升级这些包。这是一次性更新系统中所有软件包的命令,确保系统中的每一个组件都保持最新。

    使用场景:

    当你希望确保系统中的所有软件包都保持最新,或者希望全面更新系统时,这条命令非常适合。它不仅会更新LuCI,还会更新内核和所有安装的应用程序、驱动程序等。

    更新所有软件包的风险与注意事项

    在执行更新前,请注意以下几点:

  • 内核更新的风险:更新所有软件包时,可能会涉及内核更新。内核更新可能会提升性能或修复安全问题,但同时也可能导致设备重启,或某些依赖于旧内核的功能失效。如果你使用了第三方驱动或定制的内核模块,更新内核可能会导致系统不稳定。

  • 存储空间不足:OpenWRT设备的存储和内存往往有限,更新大量软件包时,可能会耗尽可用的存储空间。请务必提前检查设备的存储空间,以避免更新过程中出现失败,或导致系统崩溃。可以使用以下命令检查剩余存储空间:

  • 备份系统配置:在执行大规模更新之前,务必备份你的系统配置文件。这可以通过LuCI Web界面或者命令行来完成。如果更新过程中出现问题,备份将是恢复系统的关键。

  • 逐步更新的建议:如果设备正在正常运行,建议分阶段进行更新。例如,可以先更新LuCI Web界面,观察系统的稳定性,再逐步更新其他软件包,避免一次性大规模更新可能导致的系统问题。

备份与恢复

为了确保在更新过程中万一出现问题时能够快速恢复系统,建议在更新前进行配置备份。可以使用以下两种方式备份:

  • 通过LuCI界面:登录LuCI Web管理界面,导航到“系统 > 备份/升级”页面,点击“生成备份”按钮,下载配置文件到本地。

  • 通过命令行备份:

    然后可以通过SCP或FTP下载该备份文件到本地电脑。

总结

通过上述命令,OpenWRT用户可以轻松更新系统中的所有软件包。你可以选择仅更新LuCI Web界面,或者全面升级所有系统组件(包括内核)。在执行更新前,务必确保做好配置备份并确认设备有足够的存储空间,这将帮助你保持系统的安全性、功能完备性以及长期稳定性。

参考链接


更新OpenWRT系统中的所有软件包

Android中WebView使用LoadUrl不刷新网页的问题,网址带#只能通过reload刷新

问题描述

最近在和公司其他项目组沟通联调H5的时候,意外发现对方发过来的地址可以加载,但是没有办法正常刷新。

尤其是对方服务器上已经重新部署页面,二次进入的情况下,依旧显示上一次加载过的内容,直到应用重启为止。

问题复现

写个 WebView 的 demo,然后在 WebViewClient 的所有方法加上日志来监控网页的运行情况。

此处假定测试网址为 https://www.mobibrw.com/#/?p=43064 

对网页第一次加载可以正常加载(即调用了 onPageStartedonPageFinished )。

第二次调用 loadUrl() 加载的时候只会刷新图标,不会真的重新加载网页(只调用了 onPageFinished )。

最后发现当我们第二次加载链接的时候,如果调用的是 webview.loadUrl(url) ,就无法刷新。

但是如果调用的是 webview.reload(url) ,就可以正常刷新网页。

调用 reload 时日志如下:

原因分析

知道了调用 reload 可以重刷网页,调用 loadUrl 无法重刷网页,问题就在于这两个方法的差别了。

经过查找,得知了真正原因是因为对方的 URL 带了 #,所以导致 loadUrl 不会刷新网页。

将网址改为 https://www.mobibrw.com/?p=43064,再次调用 loadUrl,第二次加载日志如下:

可以看到有正常执行 onPageStartedonPageFinished

那么为什么 URL 里面带了个 #,我们的 WebView 就无法通过 loadUrl 刷新网页了呢?

简单来说,URL # 以及其后面的部分,是客户端这边的位置定位符,在加载网页的时候并不会真正的发送给服务端。

我们的测试网址由于带有 #,所以无论怎么调用 loadUrl,他都判断我们只是改变了网页内部的相对位置(虽然实际上我们并没有改变),不会重新加载这个网页,只是加载网页图标。

那为什么 webview.reload 又可以重刷网页呢,实际上是因为 loadUrl 默认会有缓存策略,而 reload 是无视缓存策略强制刷新的,所以我们拿这个地址去浏览器运行,是可以正常刷新的。

结论

loadUrl 会有缓存策略,二次加载遇到带 # 的网页不会刷新,reload 无视缓存策略会强制刷新。

参考链接


OpenSCAD输入某些字符导致应用闪退问题分析定位(QScintilla)

前置条件

  • macOS Sequoia (15.2) 
  • MacBook Pro 2023-Apple M2 Pro (4能效核、8性能核、32GB内存、2TB磁盘)
  • OpenSCAD 2024.12.13 (或更高版本)
  • QScintilla 2.14.1
  • Xcode 16.2

问题现象

输入法切换到 “简体拼音”, 然后按下自带键盘上的 左侧 Shift- 按键,目的是按出下划线,会导致 OpenSCAD 闪退,崩溃堆栈如下:

继续阅读OpenSCAD输入某些字符导致应用闪退问题分析定位(QScintilla)

CBM-223P单联薄膜介质可变电容器规格信息

产品规格 Products specification

代号

Code

型号

Model

安装方式

Mounting

 type

外形尺寸

Dimensions

(mm

参数

Sections

最大可变容量

Max.var.Capacitance(pF)

最小容量

Min.Capacitance(pF)

容量公差

Tolerance of Capacitance(pF)

009

CBM-223P

1

20.5×20.5×12.5

AM-2

(o):59.2
(A):141.6

(O):5±2
(A):5.5±2

(O):±(2pF+2%)
(A):±(2pF+2%)

技术特性 Specifications

型号

Model

 

绝缘电阻

Insulation Resistance

(MΩ)

动片接触电阻

Rotor

Contanct

Resistance

(MΩ)

耐电压

Voltage

Proof

(V.D.C)

     Q            

(1MHz 50pF)

转动力矩

Operating

Torque

(gf.cm)

止端力矩

End Stop

Torque

(kgf.cm)

微调增量

Trimmer

Cap.Swing

(pF)

转动方向

Rotation Direction

转动角度

Rotation

Angle

CBM-223P ≥250 ≤10 ≥100 ≥150 50~400 ≥3 ≥8 .
电容量曲线 Capacitance curve
        型 号
       Model
 
联别Section 转角关系及电容增量   Coeff  of  Rotation and  Cap   Swing   (%pF)
 100  90  80 75 70 60 50 40 30 25 20 10 (3)

CBM-223P

AM OSC 59.2 55.2 50.9 48.5 46.2 41.0 35.0 28.4 21.0 16.9 12.9 4.8  0
ANT 141.6 126.3 111.2 103.7 96.1 80.4 64.3 48.5 33.2 25.7 18.5 6.2 0
外形尺寸 Outline dimensions

参考链接