编码实践当中涉及的密码学知识

OpenSSL 是用于安全传输层TLS,Transport Layer Security)协议和安全套接字层SSL,Secure Sockets Layer)协议的的工具包,提供了 SSL 协议实现(SSLv2SSLv3TLSv1)、大量算法实现(对称/非对称/摘要)、大数运算、非对称算法密钥、ASN.1 编解码库、证书请求(PKCS10)编解码、数字证书编解码、CRL 编解码、OCSP 协议、数字证书验证、PKCS7 标准实现和 PKCS12 个人数字证书格式实现等功能。

然而一直以来 OpenSSL 代码质量,总是受到开发人员的各种诟病,因而出现了 WolfSSL 与 PolorSSL 等 OpenSSL 的开源替代产品,其中 PolarSSL 被 ARM 公司收购之后,现更名为 Mbed TLS,主要由 Trusted Firmware 组织进行维护,遵循相关的 ARM 规范,并为 Armv8-AArmv9-AArmv8-M 内核架构提供了安全可信的参考实现。本文主要主要讨论了 Base64Hash 编码、以及 OpenSSL 所涉及的相关加解密知识。

阅读更多

Windows 工作环境 Config 札记

开发人员长期以来对于 Microsoft Windows 操作系统总抱以嗤之以鼻的态度,笔者亲身经历了Windows XPWindows 7Windows 10的版本演变过程,抛开众所周知的偏见,事实上是能够感觉到系统稳定性、用户体验方面的大幅改善的,叠加近年来 CmderNeovim 等辅助开发工具的出现与逐渐成熟,作为软件开发环境,其使用体验已经完全可以与 Linux 媲美,并在图形界面的稳定性以及交互的友好性方面胜于后者。

但是对于广大硬件电子工程师而言,Altium DesignerPadsAllegro 等商业 EDA 工具仅提供支持 Windows 操作系统的版本,而高频高速 PCB 电路设计基本离不开 Windows 操作系统环境,因而 Windows 和 Linux 在笔者日常工作里都各自拥有着其不可替代性。本文主要用于记录一些笔者使用 Windows 10 操作系统的配置和习惯,便于切换到新的工作环境时快速的展开,因而全文也将会持续保持更新。

阅读更多

Linux 工作环境 Config 札记

使用 Linux 作为日常开发工作环境近 5 年时间,尝试过DebianFedoraUbuntuMint等桌面发行版。虽然 Linux 作为服务器运行稳定可靠,但是在桌面 GUI 体验一直有待改进,显卡驱动兼容性与 CPU 占用率过高等问题一直悬而未决。而日常工作当中经常需要使用到的Altium DesignerKeil uVision等商业软件仅提供 Windows 10 版本,因此笔者时常需要在两款操作系统之间来回进行切换。

Linux Mint 提供了嵌入式开发当中必不可少的交叉编译环境,也能够直接安装 KiCADSTM32CubeIDEVSCodeSublime 等生产力工具;Windows 10 则提供了 Altium Designer、开发板串口驱动等大量无法跨平台使用的商业软件支持。本文主要用于备注两款操作系统当中一些常用的开发与工作环境配置,便于后续在全新工作环境中展开部署,以方便的移植个性化的使用习惯至新设备。

阅读更多

常用数据结构 & 算法分析

数据结构自 1968 年以来被设置为一门独立课程,是关于结构化编程(以模块功能和处理过程为主的编程范式)的一门方法学,主要研究的是数据的逻辑结构物理结构以及它们之间的相互关系,并定义与这些结构相适应的算法。这里的算法描述的是一种确定并且有效的,适合用于计算机程序来实现和解决问题的方法。某种意义上,数据结构和算法是计算机科学与技术领域研究和应用的核心。

编写程应用序解决问题,首先需要从实际问题域当中抽象出一个模型,然后设计出求解该模型的算法。模型抽象的过程,实质是分析问题并从中找出操作对象,然后寻找出这些操作对象之间的关系,最终用程序语言加以描述的过程。本文采用 Linux C 语言进行描述,主要讲解了线性表队列共 5 种主要的数据结构,以及查找排序这 2 种常用算法。

阅读更多

现代汽车机械电气结构与驾驶技术分享

1885 年,德国工程师卡尔·本茨制造了第一辆安装有两冲程单缸汽油机的三轮汽车;而在 1886 年,德国人哥特里布·戴姆勒又制造出了安装有四冲程汽油机的四轮汽车;1908 年,美国人亨利·福特设计出了著名的 T 型汽车,并于 1913 年在底特律建成了世界第一条汽车装配流水线,从而创造出了庞大的汽车产业。伴随工业化大批量生产时代的当来,美国欧洲日本的汽车产业相继崛起,涌现出了博世采埃浮德尔福博格华纳麦格纳爱信电装等著名主机厂。

时至今日,中国已经成为了全球最大的汽车产销单一市场,而伴随近几年新能源技术的快速普及,整车技术快速从机械化过渡电气化,全球汽车工业的产业重心开始逐步向中国转移。国内也相继涌现出了比亚迪宁德时代等极具竞争力的新能源供应商。在这个传统燃油车新能源技术交替换代的时间点,撰写本文主要用于记录一些现代汽车机械与电气结构方面知识,同时也会记录自己购车、用车以及保养方面的心得体会。

阅读更多

Git 版本管理命令备忘录

Linux Kernel 是一个非常大规模的开源软件项目,在该项目 1991 ~ 2002 年维护的早期,所有对于代码的修改都是以补丁(Patches)和归档文件(Archived File)的形式进行传递。在 2002 年之后,Linux 内核项目开始使用一款称为 BitKeeper 的商业版本管理工具。但是到了 2005 年,Linux 社区与 BitKeeper 商业公司之间的合作关系破裂,促使 Linux 开源社区以及 Linus Torvalds 本人根据之前的版本管理经验,开发出了全新的分布式版本管理工具 Git

Git 不会以基于文件修改列表的方式来保存数据,而是以及引用快照的方式来保存文件的历史信息;即使没有 Git 版本管理服务器的支持,大部份操作也能够在本地正常进行;Git 当中的所有数据存储时都会经过 SHA-1 完整性校验,并且使用一个长度为 40 的散列字符串来存储和引用这些数据;Git 当中的所有操作都是在添加数据,因而很难执行不可撤消的任务,也很难让出现在删除数据之后无法找回的场景。

阅读更多

面向对象设计模式温故知新

设计模式(Design Pattern)代表了面向对象程序设计的最佳实践,是一套软件工程化背景下,用于提高代码可复用性的解决方案。设计模式这一术语起源于 1995 年《设计模式 - 可复用面向对象软件的基础》一书的出版,该书 4 位作者被称为四人帮 GoFGang of Four,全书一共收录了常用的 23 种模式,该书的出版是软件工程领域的一座里程碑,标志着 Java C++ 等面向对象的程序设计语言,迈向了更加具有标准范式的工程化方向。

面向对象的编程思想,通过封装继承多态降低代码的耦合度,而设计模式在此基础上强调了代码的可复用性。本文代码采用 C++ 语言进行描述,然后搭配 UML 示意图进行描述。

阅读更多