自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(194)
  • 收藏
  • 关注

原创 OpenSSL的Libcrypto接口EVP API

Libcrypto接口 OpenSSL提供了两个主要的函数库:libssl和libcrypto。libcrypto库提供了基本的关于密码学的一些常规函数,并且被libssl库所调用。EVP API屏蔽了具体算法的细节,为上层应用提供统一、抽象的接口。该接口的头文件为openssl/evp.h。如果EVP_PKEY对象需要,EVP函数支持生成参数和密钥的功能。由于这些函数使用随机数,因此应当就像这里所讨论的确保随机数生成器采用适当的种子。这样就可以利用EVP抽象接口生成对应类型密钥。公钥密码系统参数生成。

2024-04-10 15:26:21 182

原创 openSSL 3des的加密解密过程

从代码上看来,2DES的加密就是key3的值替换成key1,按照上面代码流程可以得出。24字节的密钥 分三组key,每组key都是8字节。可以看到加密顺序和解密顺序反正来的。3DES加密主要函数。

2024-04-10 09:54:33 13

原创 Linux内核的I2C读写寄存器

在日常I2C设备驱动开发过程,经常要对设备进行一些简单寄存器读写,可以利用以下函数进行封装。

2023-09-15 10:42:54 584

原创 信息系统密码应用技术框架

本标准从信息系统的物理和环境安全、网络和通信安全、设备和计算安全、应用和数据安全四个层面提出密码应用技术要求,保障信息系统的实体身份真实性、重要数据的机密性和完整性、操作行为的不可否认性;并从信息系统的管理制度、人员管理、建设运行和应急处置四个方面提出密码应用管理要求,为信息系统提供管理方面的密码应用安全保障。

2023-09-12 11:45:47 342

原创 Linux驱动I2C设备驱动

I2C(Inter-Integrated Circuit)是一种串行通信协议,用于连接集成电路(IC)之间进行数据传输。它由两根线组成:时钟线(SCL)和数据线(SDA)。I2C设备则是指使用I2C协议进行通信的各种外部硬件设备。I2C设备可以是各种芯片、传感器、存储器、扩展模块等。这些设备通过I2C总线与主控制器或其他设备进行连接,并通过发送和接收数据来实现通信和交互。每个I2C设备都有一个唯一的7位或10位地址,用于在总线上识别它。

2023-08-25 14:14:06 188

原创 信息安全术语与定义

保证信息不被泄露给非授权实体的性质。

2023-08-24 15:26:17 90

原创 TLS源码与底层socket通讯分析

实际上他们调用代码都是一样的,handshake_func 为空时,需要对handshake_func 初始化,使它指向struct ssl_method_st 方法中的 s->method->ssl_accept。回调到statem.c的static SUB_STATE_RETURN write_state_machine(SSL *s)使用ctx上下文创建 SSL的连接对象,通常是一个SSL是表征一个安全连接连接进来的一个客户端,调用的tls1_new回调。底层的socket的实现回调。

2023-08-15 11:43:29 243

原创 Android服务启动分析

找到了SystemServer类的main方法。加载服务的JNI,启动Android的所有服务。通过类加载器加载,找到静态类中的main方法。子进程里面启动systemServer。启动systemServer进程。切换到Java的世界。

2023-08-14 17:06:39 53

原创 SHA-256算法

SHA-256(Secure Hash Algorithm 256-bit)是一种加密算法,它是SHA-2(Secure Hash Algorithm 2)系列中的一员。SHA-256广泛用于密码学、数字签名、数据完整性校验等领域,被认为是一种安全可靠的散列函数。SHA-256算法具有以下特点:1)安全性:SHA-256被广泛认为是一种安全的散列函数。它提供了较高的抗碰撞性,即很难找到不同的输入数据生成相同的哈希值。SHA-256的安全性来自于其设计原理以及经过的广泛测试和分析。

2023-08-11 13:59:32 618

原创 Linux内核自旋锁应用

spin_lock、spin_lock_bh、spin_lock_irq和spin_lock_irqsave 都是用于实现自旋锁的函数。它们在不同的上下文环境中使用,具有不同的中断屏蔽级别和上下文切换机制。单核的话,只有发生中断会使任务被抢占,那么可以进入临界区之前先关中断,但是对多核CPU光关中断就不够了,因为对当前CPU关了中断只能使得当前CPU不会运行其它要进入临界区的程序,但其它CPU还是可能执行进入临界区的程序。

2023-08-11 10:03:22 168

原创 Android的守护进程ServiceManager

ServiceManager是Android系统中的一个重要守护进程,它负责管理系统服务的注册、查找和启动。

2023-08-10 14:40:37 653 1

原创 软考嵌入式设计师之上午题基础概念07

(1)内核内核是指操作系统中的一个组件,它包含了OS的主要功能,即OS的各种特性及其相互之间的依赖关系,这些功能主要包括:A、任务管理:对系统中运行的软件进行描述和管理,并完成处理器资源分配和调度。B、存储管理:提高内存的利用率,方便用户使用,提供足够的存储空间。C、设备管理:方便设备的使用,提高CPU和I/O设备的利用率。D、文件管理:解决文件资源存储、共享、保密和保护等问题。注:不同嵌入式操作系统的内核设计各不相同,取决于系统设计和实际需求。

2023-08-10 14:00:20 83

原创 openSSL中EVP接口

OpenSSL在日常开发者通常是以so的形式引入程序中,下面我们来跟踪一下EVP是如何把这些算法接口抽象统一实现的。ossl_init_add_all_ciphers作为静态方式加载,只加载一次把所有的cipher通过openssl_add_all_ciphers_int添加到改进程中。

2023-08-03 11:42:20 583

原创 软考嵌入式设计师之上午题基础概念06

由于处理器的每种运行模式都有自己独立的物理寄存器R13,所有在用户应用程序的初始化部分,一般要初始化每种模式下的R13,使其指向该运行模式的栈空间。除了用户模式之外的其他6种处理器模式称为特权模式,在这些模式下,程序可以访问所有的系统资源,也可以任意地进行处理器模式切换,其中,除了系统模式外,其他的5种特权模式又称为异常模式。系统模式并不是通过异常过程进入的,它和用户模式具有完全一样的寄存器,但是系统模式属于特权模式,可以访问所有的系统资源,也可以直接进行处理器模式切换,它主要供操作系统任务使用。

2023-08-03 10:07:11 54

原创 Linux内核中的UVC(USB Video Class)驱动

V4L2(Video for Linux 2)是Linux内核中的视频设备驱动框架,而UVC(USB Video Class)是一种使用USB接口的摄像头设备通信协议。在Linux内核中,V4L2和UVC之间存在以下关系:1. V4L2支持多种视频设备:V4L2是一个通用的视频设备驱动框架,它旨在支持各种类型的视频设备,包括USB摄像头、摄像头传感器、摄像头接口等。这样,V4L2可以在内核中集成不同类型的摄像头驱动程序。

2023-08-02 12:12:08 1405

原创 Linux内核自旋锁使用场景

spin_lock、spin_lock_bh、spin_lock_irq和spin_lock_irqsave都是在内核中用于同步访问共享资源的锁。它们在不同的上下文中使用,并具有一些区别。

2023-07-27 15:57:15 208

原创 PINblock的格式与应用

描述:在联机交易中,POS 终端或 ATM 会读取用户输入的明文 PIN,并将其使用单倍长或双倍长加密算法转换为 PINBLOCK 格式,然后将 PINBLOCK 构建为交易数据的一部分,通过网络发送给发卡银行或支付网关进行验证和授权。需要注意的是,脱机交易的安全性取决于终端设备和银行卡的安全性措施,包括对终端进行合适的保护、加密算法的安全性以及卡片上保存的认证密钥的保护等。- 原理:在脱机交易中,银行卡的交易数据不需要实时通信和授权,而是在交易发生的地点(如 POS 终端)上完成交易验证和授权。

2023-07-26 14:36:10 419

原创 等待队列原理

使用等待队里,通常我们会以wait_event wait_event_interruptible两个宏来令当前进程阻塞,下面来分析一下他们阻塞过程。主动放弃CPU,选择一个优先级更加高的进程运行,开始阻塞。当需要唤醒等待队列时,内核给我们以下几组宏。把等待队列放入等待队列链表中。

2023-07-26 14:08:39 47

原创 用openSSL实现TLS双向认证

TLS(传输层安全性)双向认证,也称为客户端认证或互相认证,是一种网络安全协议的扩展,用于建立在传输层上的安全连接。传统的TLS认证只需要服务器验证客户端的身份,而双向认证则要求客户端也验证服务器的身份。在TLS双向认证中,客户端和服务器都必须拥有数字证书。数字证书由可信的第三方证书颁发机构(CA)签发,用于证明实体(如服务器)的身份。以下是TLS双向认证的基本步骤:1. 服务器配置:服务器需要配置受信任的数字证书,该证书由CA签发。配置包括私钥和公钥。

2023-07-26 11:39:56 1064 2

原创 摄像头初始化时序

DVP(Digital Video Port)接口是一种常用于摄像头模块和处理器之间的数字视频传输接口。它被广泛应用于嵌入式系统中,包括智能手机、平板电脑、工业视觉等领域。DVP接口使用平行数据传输方式,通过多个数据线同时传输视频像素数据,具有高带宽和低延迟的特点。它通常由以下几个信号线组成:1. D0-D7(Data0-Data7):D0至D7是并行数据线,负责传输视频像素的数字数据。数据位数可以根据使用的摄像头模块而变化,常见的有8位(RGB888)或10位(RAW10)。

2023-07-21 17:40:59 695

原创 Linux内核读取IO内存物理地址

1.IO端口与IO内存IO端口和IO内存是计算机系统中用于实现输入输出(I/O)操作的两种方式。IO端口是一组特殊的寄存器,通过向这些寄存器写入或读取数据,可以控制设备进行输入输出操作。在x86架构的计算机中,通常有64KB的IO地址空间,其中前1024个I/O端口被保留用于系统使用。IO内存则是指一段专门用来进行I/O操作的物理内存区域,与普通内存不同,这段内存被映射到了设备控制器上。在使用I/O内存时,需要先将该段内存映射到一个虚拟地址空间上,并且必须遵循特定的访问规则才能进行有效的读写操作。

2023-07-21 11:00:17 719

原创 内核input子系统分析

Linux内核的输入子系统分为三层,分别为事件处理层、核心层、驱动层通常是输入设备驱动,如触摸屏TP、按键驱动等;接收到底层中断时,主动上报数据,将底层的硬件输入转化为统一事件形式,想输入核心(Input Core)汇报。是由Linux内核发布时已经写好的,它承上启下为驱动层提供输入设备注册与操作接口,如:input_register_device;通知事件处理层对事件进行处理;在/Proc下产生相应的设备信息。

2023-07-20 17:16:41 87

原创 软考嵌入式设计师之上午题基础概念05

在下午题方面,2006年考查了X86方面的应用、2007年考查了8051方面的应用,这个可能是一个过度过程,以目前ARM在嵌入式领域的广泛应用和普及程度,下午题目考查ARM应用方面或者32位其他的微处理器方面的应用题目可能在不就将来的考试中就会出现。(3)嵌入式DSP处理器(DSP):专门用于信号处理方面的处理器,其在系统结构和指令算法方面进行了特殊设计,使其处理速度比最快的CPU还快10~50倍,在数字滤波、FFT、频谱分析等方面获得了大量的应用。最大的特点是单片化,体积小,功耗和成本低,可靠性高。

2023-07-19 14:32:31 59

原创 工作与工作队列使用

struct work_struct是 Linux 内核中用于表示工作项(work item)的结构体,在 Linux 内核中,工作项是一项需要被异步执行的任务。通过创建一个 struct work_struct 对象,并将其添加到工作队列中,可以使得内核在适当的时机执行该工作项的回调函数。

2023-07-19 14:19:43 128

原创 insmod加载模块流程

insmod是Linux系统中用于加载内核模块的工具,Android中谷歌通过编写自己的命令解释器来实现bash,源码的位置在system\core\init\builtins.cpp命令行解释器的映射表,对应的函数是do_insmod函数对insmod 传参进行解释,有时候需要再insmod的时候传递一些参数,open打开ko文件,调用系统调用__NR_finit_module陷入内核。

2023-07-19 14:02:33 375

原创 Linux内核VFS的open

open系统调用定义在内核源码目录fs/open.c里面参数:dfd 文件描述符filename 文件具体路径名字flags打开文件标志位,方式mode 权限控制位。

2023-07-13 10:26:41 108

原创 软考嵌入式设计师之上午题基础概念04

每种指令的数量及所需要的指令时钟数(CPI)如下表所示,则该计算机的指令平均时钟数为(4);该计算机的运算速度为(5)MIPS。某幅图像具有640×460个象素点,若每个象素具有8位的颜色深度,则可表示(13)种不同的颜色,经过5:1压缩后,其图像数据需要占用(14)(Byte)的存储空间。在32位总线系统中,若时钟频率为500MHz,传送一个32位字需要5个时钟周期,则该总线系统的数据传送速率为(28)MB/s。一个4位的二进制计数器,由0000状态开始,经过25个时钟脉冲后,该计数器的状态为24。

2023-07-11 10:36:24 54

原创 DSA算法

DSA(Digital Signature Algorithm,数字签名算法)是一种非对称加密算法,用于生成和验证数字签名。它是美国国家标准与技术研究所(NIST)于1994年发布的一种公钥密码体制。DSA算法的基本原理是基于数论中的离散对数问题。它利用了有限域上的运算和离散对数的难解性,实现了数字签名的生成、验证和认证。

2023-07-11 10:25:43 898

原创 Linux用Samba共享两个用户共享一个文件夹

编辑Samba配置文件(通常是/etc/samba/smb.conf)在配置文件中,您可以创建共享文件夹,并定义每个共享文件夹的访问权限和用户访问控制。例如,创建一个名为shared_folder的共享文件夹并定义访问权限可以这样设置:在上述配置中,/path/to/shared_folder是实际的共享文件夹路径,user1和user2是被允许访问该共享文件夹的用户。

2023-07-10 11:24:01 973

原创 OpenSSL对RSA密钥参数封装

1. BIGNUM *n:存储 RSA 的模数(modulus)。- 模数是两个大素数的乘积,决定了 RSA 的密钥空间。2. BIGNUM *e:存储 RSA 的公共指数(public exponent)。- 公共指数通常为固定值,用于加密操作。3. BIGNUM *d:存储 RSA 的私有指数(private exponent)。- 私有指数用于解密操作。4. BIGNUM *p:存储 RSA 的第一个大素数(prime1)。- 大素数 p 是用于计算 RSA 的私钥的一部分。

2023-07-07 11:53:15 249

原创 Linux的执行elf可执行文件流程

execve族系统调用用于运行一个新的进程,并且替换当前进程的内存映像(代码,数据,栈)为新进程的内存映像。这个系统调用会在指定的进程空间内加载一个新的程序,同时将参数和环境变量传递给新程序。execve族的调用可以让用户免于开发自己的shell或者cli程序,用现有的程序交互式地对系统进行操作,甚至可以在shell中启动其他进程。由以上代码可知,execve族系统调用主要是通过elf加载器解释加载到内存,再通过修改arm的pc sp指针,使得该elf可执行文件得以运行。

2023-07-05 15:41:10 454

原创 软考嵌入式设计师之上午题基础概念03

如下图所示,若低位地址(A0-A11)接在内存芯片地址引脚上,高位地址(A12-A19)进行片选译码(其中,A14和A16没有参加译码),且片选信号低电平有效,则对下图所示的译码器,不属于此译码空间的地址为 (36)。某总线有104根信号线,其中数据总线(DB)32根,若总线工作频率为33MHz,则其理论最大传输率为 (24)。若连续执行10条指令,则共需要时间(3)△t。按照串行的方式,执行完一条指令才能执行下一条指令,那么执行完100条指令的时间为:(4+3+5)×100=1200。

2023-07-05 09:34:31 99

原创 基于哈希函数的消息认证码HMAC

HMAC,全称为Hash-based Message Authentication Code(基于哈希函数的消息认证码),是一种用于验证消息完整性和认证的算法。HMAC结合了哈希函数(如MD5、SHA-1、SHA-256等)和密钥来生成一个固定长度的认证码。它的安全性基于哈希函数的性质和密钥的保密性。HMAC的关键特性是它不仅依赖于原始消息的内容,还依赖于密钥。因此,即使两个消息的内容相同,只要密钥不同,生成的认证码也会不同,从而增加了安全性。

2023-07-04 16:03:41 396

原创 散列函数应用

散列函数(哈希函数)是一种将输入数据(消息)转换为固定大小的输出(散列值)的算法。散列函数具有以下特点:1. 固定输出长度:散列函数生成的散列值具有固定的输出长度,不论输入数据的长度如何,散列值的长度始终保持不变。2. 高度离散性:散列函数应该尽可能地将不同的输入映射到不同的输出,且对于输入的微小变化,散列值应有较大的变化。3. 单向性:散列函数是单向的,从散列值推导原始输入数据应当非常困难,理想状态下应该是不可逆的。

2023-07-04 14:37:28 309

原创 Base64编码解码

Base64 是一种常用的编码方式,用于将二进制数据转换为可打印的 ASCII 字符串。它的主要特点如下:1. 字符集:Base64 使用了 64 个字符来表示数据,包括大小写字母(A-Z, a-z)、数字(0-9)以及两个特殊字符(+ 和 /)。2. 填充字符:Base64 编码后的字符串长度通常不会与原始数据长度完全对齐。为了保持长度整齐,Base64 在末尾添加一个或两个 `=` 号作为填充字符。3. 编码方式:Base64 编码将每 3 个字节作为一组,转换为 4 个 Base64 字符。

2023-07-04 12:15:21 3613

原创 ECDH的密钥交换算法

它基于椭圆曲线加密算法,使用离散对数问题的困难性来保证密钥交换的安全性。- 它的计算复杂度相对较低,使用椭圆曲线加密算法可以在相对较短的密钥长度下达到与传统非对称加密算法相当的安全性。公钥是私钥乘以基点得到的结果。4. 双方使用对方的公钥和自己的私钥计算一个共享密钥。计算方法是使用对方的公钥乘以自己的私钥得到的结果。- 它提供了一种安全的密钥交换机制,即使在公开信道上交换公钥也不会泄露私钥信息。由结果可以看出来,客户端和服务器派生的密钥都是一样的。1. 双方选择一个公开的椭圆曲线以及该曲线上的基点。

2023-07-04 11:16:19 639

原创 Linux内核的uevent机制

Linux内核的uevent机制是一种事件通知机制,用于在设备状态发生变化时通知用户空间。uevent代表"用户事件",它允许设备驱动程序和其他内核子系统在设备插入、移除、配置或其他相关事件发生时发送消息给用户空间。当一个设备插入到系统中时,内核会生成一个uevent并发送给用户空间的udev守护进程。udev进程负责接收uevent消息,并根据消息的内容进行设备管理和配置。udev可以根据设备的属性信息,为设备创建设备节点文件、加载驱动程序、设置设备权限等。

2023-06-30 10:55:49 1155

原创 软考嵌入式设计师之上午题基础概念02

(3)解决TTL与CMOS电路接口困难的办法是在TTL电路输出端与电源之间接一上拉电阻R,上拉电阻R的取值由TTL的高电平输出漏电流IOH来决定,不同系列的TTL应选用不同的R值。分析模型法是用一些数学方程去刻画系统的模型,而模拟模型法是用模拟程序的运行去动态表达嵌入式系统的状态,而进行系统统计分析,得出性能指标。性价比中的价格,除了直接购买嵌入式系统的价格外,还应包含安装费用、若干年的运行维修费用和软件租用费。(4)汉字表示法(教程67、68页),搞清楚GB2318-80中国标码和机内码的变换。

2023-06-29 10:47:20 49

原创 软考嵌入式设计师之上午题基础概念01

(1)定义:以应用为中心,以计算机技术为基础,软硬件可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。(2)嵌入式系统发展的4个阶段:无操作系统阶段、简单操作系统阶段、实时操作系统阶段、面向Internet阶段。(3)知识产权核(IP核):具有知识产权的、功能具体、接口规范、可在多个集成电路设计中重复使用的功能模块,是实现系统芯片(SOC)的基本构件。(4)IP核模块有行为、结构和物理3级不同程度的设计,对应描述功能行为的不同可以分为三类:软核、固核、硬核。

2023-06-29 10:21:05 70

原创 Linux操作系统的生产者与消费模型

尽管所有的生产者线程和消费者线程是以异方式运行,但它们必须保持同步:当一个缓冲区为空时不允许消费者去取走产品,当一个缓冲区满时也不允许生产者去存入产品。可以看到生产者与消费者有序执行生产与消费。里面获取数据,这例子是对数据的打印。里面生成数据,消费者可以从。分别定义了两个信号量,是缓冲区,生产者可以往。

2023-06-29 10:11:33 48

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除