首页
游戏
影视
直播
广播
听书
音乐
图片
更多
看书
微视
主播
统计
友链
留言
关于
论坛
邮件
推荐
我的硬盘
我的搜索
我的记录
我的文件
我的图书
我的笔记
我的书签
我的微博
Search
1
在IC617中进行xa+vcs数模混仿
84 阅读
2
科普:Memory Compiler生成的Register file和SRAM有何区别?
74 阅读
3
virtuoso和empyrean alps模拟仿真和混仿教程
74 阅读
4
后仿中$setup,$hold与$setuphold
45 阅读
5
文档内容搜索哪家强? 15款文件搜索软件横向评测
35 阅读
默认分类
芯片市场
数字电路
芯片后端
模拟电路
芯片验证
原型与样片验证
算法与架构
DFX与量产封装
PC&Server OS设置
移动OS设置
软件方案
新浪备份
有道备份
登录
Search
标签搜索
python
Docker
vscode
linux
systemverilog
vcs
STM32
PyQT
EDA
FPGA
gvim
cadence
Alist
xilinx
UVM
uos
macos
package
MCU
risc-v
bennyhe
累计撰写
378
篇文章
累计收到
31
条评论
首页
栏目
默认分类
芯片市场
数字电路
芯片后端
模拟电路
芯片验证
原型与样片验证
算法与架构
DFX与量产封装
PC&Server OS设置
移动OS设置
软件方案
新浪备份
有道备份
页面
游戏
影视
直播
广播
听书
音乐
图片
看书
微视
主播
统计
友链
留言
关于
论坛
邮件
推荐
我的硬盘
我的搜索
我的记录
我的文件
我的图书
我的笔记
我的书签
我的微博
搜索到
168
篇与
的结果
2025-07-14
NTFS和FAT文件系统中的尺寸限制 (2008-06-09 09:31:31)
NTFS和FAT文件系统中的尺寸限制每个文件系统都支持一个最大的卷尺寸,文件尺寸,已经每卷可容纳的文件最大数量。因为FAT16和FAT32分别支持4GB和32GB的卷,要创建大于32GB的卷,就必须使用NTFS格式。如果在多系统共存的计算机中使用FAT16或FAT32格式,就必须对其尺寸限制有所了解:一、小于16MB的FAT卷会被格式化为FAT12格式二、使用MS-DOS,Win95,Win98,WinMe,以及其它很多操作系统的计算机,其FAT16卷如果超过2GB就不可访问了。这个2GB的限制是由于这些操作系统不支持超过32KB的簇。三、理论上说,FAT32卷可以达到约8TB;而实际上,WinXPProfessional可以格式化的最大FAT32卷也就是32GB而已。所以,必须使用NTFS格式来格式化超过32GB的卷。但,WinXPPro可以读写用其它操作系统格式化的更大的FAT32卷。四、如果要建立包含多个物理磁盘的卷,例如跨区卷和带区卷,那么卷的大小就取决于每块磁盘上所使用了的空间。在多物理磁盘上创建大于32GB的卷,仍然要使用NTFS格式。有关FAT16和FAT32的更多信息,参见“FAT文件系统”。NTFS卷上的最大尺寸理论上,NTFS的最大卷包含264减1个簇。实际上,WinXPPro中,NTFS卷的最大限制是232减1个簇。举例来说,如果是64KB的簇,那NTFS卷的最大尺寸就是256TB减64KB这么大。如果使用默认的4KB簇,NTFS卷的最大尺寸就是16TB减4KB这么大了。由于主引导记录(MBR)中分区表的限制,硬盘仅仅支持最大2TB的分区。要超过这个限制,必须建立NTFS的动态卷。WindowsXPProfessional使用了一种有别于分区表的特殊的数据库来管理动态卷,这就是动态卷可以超过在分区表中2TB限制的原因。动态NTFS卷可以达到NTFS支持的卷尺寸的最大限制。使用GUID分区表的安腾计算机也可以支持超过2TB的NTFS卷。注如果在一个NTFS文件夹中包含了大量的(300,000或更多)的文件,请禁止生成短文件名,特别是当长文件名的前6个字符相近的时候。详见后续译文“NTFS性能优化”。NTFS性能优化NTFS的性能受很多因素影响,比如簇的大小,磁盘碎片的多少,以及象反病毒软件等应用程序的使用情况等等。此外,NTFS的一些特性,如压缩和索引服务同样可能影响其性能。可以通过下面的一些方法来优化NTFS的性能。簇的大小在格式化一个NTFS卷之前,你首先要对自己要保存在该卷上的文件的类型做一个评估,以便决定是否使用默认的簇大小。即,重要的是先回答:这些(要保存)的文件是否大小基本一致?是否大部分文件的尺寸要小于默认簇的大小?这些文件的尺寸是不变的还是常变的?如果大部分文件都小于默认簇的大小(比如4KB)并且都保持文件尺寸不变,使用默认簇大小将减小磁盘空间的浪费。因为,此时簇的尺寸变小将增加碎片产生的可能,尤其当这些(4KB左右)的文件占用了超过一个簇的空间的时候。所以这时候可以在格式化卷的时候对簇的大小做相应的设定。如果要存储的文件会比较大,或者尺寸可能会增大,就该用16或32KB的簇来替代4KB的簇。注意:压缩功能只在4KB或更小的簇为基本存储单位的卷上才可以实现。在Windows2000或更早版本的windows产品中从FAT到NTFS转换的时候也可能影响簇的大小。因为,被转换的卷,簇的大小是512byte,主文件表(MFT)也很可能在转换过程中产生碎片。作为优化性能的考虑,应该备份该卷的所有数据,重新格式化该卷,并在格式化的过程中指定簇的尺寸,然后再恢复数据。如果想进一步了解对簇的尺寸选择的相关知识,请参考本章前面讲过的“簇尺寸”内容。短文件名每当建立一个长文件名的文件时,NTFS就会自动产生一个类似8-3短文件名的备份条目。8-3短文件名即用8个字符表示文件名,3个字符表示文件的扩展名,文件名和扩展名之间用一个句点隔开。如果在一个文件夹中包含了非常多(例如300,000个或更多)的文件,而且所有文件都采用了长文件名规则命名并且初始的字符都相同,那么建立这些文件所需的时间就要增多。这是由于NTFS是根据长文件名的前6个字符来建立短文件名索引的。在多于300,000个文件的一个文件夹中,由NTFS用8-3规则建立文件名相似的长文件所对应的短文件名备份时会产生冲突。这种在建立新的短文件名时和已经存在的短文件名之间的冲突,会使NTFS在建立新文件的时候,所耗费的时间是没有这种冲突时的6到8倍。要减少这种在建立新文件时所耗费的时间,可以在命令提示符下使用fsutilbehaviorset这个命令来禁用8-3规则以优化文件系统性能。详见本章最后部分:“在NTFS上建立MS-DOS-可读取的文件名”。如果既要让NTFS使用8-3命名规则建立文件名备份,又要提高其系统性能,可以通过建立命名规划,使长文件名在文件名的开始而不是在结尾来体现文件名的不同。详见“WindowsXPProfessional中的文件名”一节。文件夹结构NTFS支持在每个卷上有大量文件和文件夹的多个卷的存在,由使用者来组织文件夹结构以达到最优化的工作表现。在决定一个文件夹的结构时,下面几点是要考虑到的:如果要频繁和快速地建立、删除、打开和关闭其中的文件,就要尽量避免把大量文件放入一个文件夹内。最好的解决方案就是把它们分门别类地放到几个子文件夹中去,这样才能条理清晰地分配自己的工作量。要是文件之间没有彼此的关联,无法放到几个逻辑上有关联的文件夹中去,那就应该禁用8-3文件名的生成。而如果的确需要8-3文件名(译者注:例如在dos下兼容的需要),提前制订自己的命名计划,使长文件名的前6个字符不尽相同。关键点文件夹越大,运行chkdsk.exe命令所需的时间越长。详见“磁盘与文件系统常见问题集”。磁盘碎片存在大量碎片的卷,其性能要比经常做碎片整理的卷差。可以通过磁盘碎片整理控制台或者命令提示符下的defrag命令在每周空闲的时候进行磁盘碎片的整理。详见本章前面的小节“对NTFS卷进行磁盘整理”。反病毒程序反病毒程序在系统之上扫描病毒,就像撑起了一个保护伞,这也影响到文件系统的性能。这种影响对不同的杀毒软件来说也不一样。在评价杀毒软件的时候,要看哪一个软件在进行基线测试的时候对系统环境影响最小。众多反病毒软件都提供了随用户意愿来自定义软件运行参数的调节选项以降低对操作系统性能的影响。压缩功能压缩功能同样增加了系统的额外开销。即使在同一计算机内拷贝文件的时候,压缩文件系统也要经历一个解压缩、拷贝、重压缩为新文件这样一个过程。详见本章前面的小节“文件压缩”。索引服务对Win2000/XP用户来说,如果经常在NTFS卷上查找文件,可以通过开启索引服务来大大减少查找的时间。就是对资料的内容(而不仅仅是标题,译者注)进行查找的时候,索引服务同样起作用。开启索引服务后,NTFS会使用系统的一部分资源来建立和维护索引,跟踪文件更改并对这种更改进行记录。而这些操作仅仅带来很小的性能牺牲。实际上,对于经常进行搜索的卷来说,启用索引服务所带来的查找速度的提升幅度,要远远高于由此带来的文件系统性能下降的幅度。详见本章前面小节“索引服务”。最近访问时间NTFS卷上的每个文件和文件夹都有一个属性,就是“最近访问时间”(LAT),这个属性表明了该文件或文件夹的最后访问时间。比如当某用户打开文件夹列表,在文件夹中添加文件,读取一个文件,或者对某文件进行更改的时候,都会改变这个属性。LAT是存储在内存中并最终在磁盘的两个地方完成写入:一、MFT记录中文件属性的部分二、该文件的目录项中。目录项存储在包含该文件的文件夹中,包含多个物理连接的文件(译者理解:文件在空间上的物理存储是不一定连续的,可能有多个物理片段,每个片段称为一个“连接”)也就有多个目录项。磁盘上已经存在的LAT并不总是最新的,这是由于NTFS每隔一个小时才将在内存中打开的文件的该属性保存一次。在用户或应用程序对文件进行只读操作的时候,NTFS也会延后“最后访问时间”属性的写入,比如在列文件夹目录或者读取(但不是更改)文件夹中的一个文件的时候。如果对于“读”操作,LAT属性也要保持最新的话,所有的“读”操作就变成了“写”操作,这对NTFS的性能是影响很大的。注基于文件属性的LAT,即使它的所有在当前存储于磁盘上的值完全不正确,也无关紧要。NTFS会随时将磁盘上的可疑属性值用内存中存储的精确值来替换。NTFS最终会在下列位置,将内存中的LAT存储到磁盘上。在文件的属性中如果当前内存中的LAT和上次保存在硬盘上的LAT有一个小时的时差,或者内存中对该文件的所有进程都结束的时候,NTFS就会对该文件的LAT属性进行更新。例如,如果当前一个文件的LAT是1:00P.M.,而你在1:30P.M.又读取了该文件,NTFS不会更新该LAT。而如果你又在2:00P.M.的时候再次读取该文件,NTFS会把该文件的LAT属性更新到2:00P.M.,因为此时该文件的LAT存储属性为1:00P.M.而内存中的属性为2:00P.M.。在文件的目录项中在下列事件发生时,NTFS更新目录项:当NTFS更新文件的LAT的时候,检测到该文件的LAT比在目录项中存储的LAT差别在一个小时以上的时候。这种更新最为典型地发生在当某个应用程序关闭在文件夹中用于访问该文件的句柄的时候。如果该程序延长该文件句柄的打开时间,就会在更新目录项的时候出现迟滞。当NTFS更新其它的文件属性比如“最近更改时间”(LMT),而LAT的更新未决的时候。在这种情况下,NTFS会在不影响系统性能的前提下,随其它属性的更新而更新LAT。注NTFS不会在内存中对某文件调用的所有进程都结束的时候更新该文件的目录项。如果有某个NTFS卷,包含了大量的文件夹和文件,那么当某个应用程序对每个文件依次进行简短的访问的时候,由建立LAT更新所占用的I/O带宽会在全部的I/O带宽中占据非常明显的比重。为了加快访问文件夹或文件的速度,可以使用fsutilbehaviorsetdisablelastaccess这个命令来禁止更新LAT。在应用了该命令并重启计算机后,LAT就不会再被更新了。此时建立一个新的文件,它的LAT就会永远保持在它最初建立的时间上。要了解fsutilbehaviorsetdisablelastaccess命令的更多信息,请查看WinXP的帮助
2025年07月14日
0 阅读
0 评论
0 点赞
2025-07-14
the problem of Grub (2008-06-09 09:25:42
一、Grub Error 出现症状:Code:root (hd0,0) filesystem type unknown partition type 0x7 Error 17 : Cannot mount selected partition[Ctrl+A Select All]解决方法: 中文意思为无法挂载分区, 也就是Grub可以确认所使用的分区存在但是该分区上使用的文件系统无法被Grub识别.确认一下再grub.conf中的root(x,y)设置是否正确.如果在选择启动Windows时出现上述错误, 请检查一下grub.conf关于Win的配置中是否有 root (hdX,Y) (或 rootnoverify (hdX,Y)) 和 chainloader (hdX,Y)+1.二、Grub error:Cannot mount selected partition启动错误的解决下午在window下用pqmagic把移动硬盘重新分区后,重启选择进入ubuntu的时候出现启动错误:Grub Error17:Cannot mount selected partition......上网查询发现,对双系统,在window下pq调整分区大小很容易产生分区表重改等莫名其妙的问题。上述错误就是分区表被改写,原有的linux boot分区号发生变化,因此grub引导错误。解决办法有很多:1.最快最简单的在启动菜单选择unbuntu后,不要回车进入,按e进入编辑grub模式。修改root(hd0,y)的y值(hd0表第一块硬盘,y表硬盘分区号)。如:将原有的root(hd0,7)改为(hd0,8)。然后安b重启,如果能进入系统则表示正确,如果同样报错,那么重复上述步骤修改(hd0,y)为别的值,试几次就能成功了。成功登录linux后还要修改menu.lst达到一劳永逸的效果。打开终端:sudo vi /boot/grub/menu.lst如将root(hd0,7)修改为正确的值(hd0,y),同时将kernel行的root=/dev/sda8也修改为正确数值y+1(sda8对应hd0,7)。例子如下:title Ubuntu, kernel 2.6.17-10-genericroot (hd0,8)kernel /boot/vmlinuz-2.6.17-10-generic root=/dev/sda9 ro quiet splash locale=zh_CNinitrd /boot/initrd.img-2.6.17-10-genericquietsavedefaultboot2.如果手头有livecd(ubuntu的destop cd),可以通过livecd启动linux,然后修改grub配置和menu.lst。$sudo grub 进入grub find /boot/grub/stage1 提示正确的boot位置,如(hd0,8)root (hdX,Y)setup (hdX)quit注意:其中的X、Y是执行find /boot/grub/stage1命令后系统提示的。或者执行$sudo fdisk -l根据各个分区显示信息判断正确的boot分区号。然后修改menu.lst,首先得将boot分区mount上。如:$sudo mount /dev/sda9 /media$cd /media$sudo vi boot/grub/menu.lst 修改之。重启ok。3.假如boot下面的东西都损坏了,那还得麻烦点:$sudo grep -v rootfs /proc/mounts >sudo tee /etc/mtab 生成/etc/mtab$grub-install --no-floppy /dev/hda 安装grub到mbr 然后建立menu.lst三、删除grub引导Dos下输入:fdisk/mbr四、恢复grub引导重装windows后,grub没有了这是很多人都会碰到的问题这里试图用各种不同的方法解决有redhat的安装或恢复光盘 用光盘启动,输入linux rescue,回车 光盘将自动引导、搜索并挂载ext3分区 挂载好,进入shell后,执行chroot /mnt/sysimage cd /sbin ./grub-install /dev/hda 注意(/dev/hda是你要安装grub的硬盘,请自己修改)重启 五、使用grub启动系统如果你能启动到dos,并且安装有windows系统,那么可以启动到dos,format /mbr然后进windows下载grub for dos,如果可以的话,最好下载explorer2fs,这样执行恢复操作比较方便可以到这里下载grub for doshttp://newdos.yginfo.net/grubdos.htm启动机器进windows,运行explorer2fs,把你linux所在分区里的/boot/grub/menu.lst拷贝出来,并且覆盖掉grub for dos中的那个重启机子,进入dos,执行grub 应该可以看见菜单了,选择进入 cd /sbin ./grub-install /dev/hda 注意(/dev/hda是你要安装grub的硬盘,请自己修改) 还是使用grub引导系统 如果你只有一个linux,但是你碰巧能够启动grub的话,那么也可以解决问题启动进grub的命令行,会看到grub> 输入root (hd0,3)注意(hd0,3)表示第一个硬盘的第4个分区(很多东西都是从0开始的),可以对照个人情况做相应的修改输入 kernel (hd0,3)/boot/vmlinuz-2.6.9-ext3-686 注意,如果你不清楚你的内核镜像叫什么名字,也没有关系,当你输入kernel (hd0,3)/boot/后,按几下tab就可以看见了,如果你需要一个initrd来引导系统的话(大部分都要这东西),那么你需要在这一行后加上如 root=/dev/hda4这一参数,hda表示你的第一个硬盘,4表示是你的第四个分区,这里是从1开始计算的 如kernel (hd0,3)/boot/vmlinuz-2.6.9-ext3-686 root=/dev/hda4 输入initrd (hd0,3)/boot/initrd.img-2.6.9-ext3-686 注意按自己的实际情况修改,如果你不清楚的话,可以按tab 最后输入boot引导系统 接下来的事情参照上边部分 防患于未然,为以后做准备 做个可以引导进linux的救援盘如果你有软驱的话,那么,一个简单的方法就是将grub装在软盘上。只要这样 ./grub-install /dev/fd0但是,软盘是很不可靠的,你需要多备份几张,而且过段时间要重写一下。好在这个并不浪费空间。为了可靠起见,可以下载并刻录一张livecd,这样以后就可以方便的进行修复工作了
2025年07月14日
0 阅读
0 评论
0 点赞
2025-07-14
MD5校验值program(4) (2008-06-09 09:24:01)
void CSecurity::MD5_memset( POINTER output, int value, size_t len ) { size_t i; for (i = 0; i < len; i++) ((char *)output) = (char)value; } void CSecurity::MD5( const char string ,char lpMD5StringBuffer ) { MD5_CTX context; unsigned char digest[16]; static char output[33]={""}; size_t len = strlen (string); int i; MD5Init( &context); MD5Update( &context, (unsigned char*)string, len ); MD5Final( digest, &context ); for (i = 0; i < 16; i++) { sprintf(&(lpMD5StringBuffer[2*i]),"%02x",(unsigned char)digest); sprintf(&(lpMD5StringBuffer[2*i+1]),"%02x",(unsigned char)(digest<<4)); } for(i=0;i<32;i++) { output=lpMD5StringBuffer; } } void CSecurity::StringAddOne( char * orstring ) { size_t len; size_t i,n; len = strlen(orstring); n = len - 1; for(i = n; i >= 0; i--) { if(orstring=='9') { orstring = 'A'; break; } else if(orstring=='Z') { orstring='a'; break; } else if(orstring=='z') { orstring='0'; continue; } else orstring += 1; break; } } =============================stdafx.h=====================================// stdafx.h : 标准系统包含文件的包含文件,// 或是常用但不常更改的项目特定的包含文件//pragma once//导出define SECURITY_EXPORTSdefine WIN32_LEAN_AND_MEAN // 从 Windows 头中排除极少使用的资料// Windows 头文件:include// TODO: 在此处引用程序要求的附加头文件============================stdafx.cpp========================================// stdafx.cpp : 只包括标准包含文件的源文件// Security.pch 将成为预编译头// stdafx.obj 将包含预编译类型信息include "stdafx.h"// TODO: 在 STDAFX.H 中//引用任何所需的附加头文件,而不是在此文件中引用=====================================================================以上程序使用命令:@cl /GD /LD Security.cpp stdafx.cpp 编译即可分享:
2025年07月14日
0 阅读
0 评论
0 点赞
2025-07-14
MD5校验值program(3) (2008-06-09 09:21:19)
GG (a, b, c, d, x[ 1], S21, 0xf61e2562); GG (d, a, b, c, x[ 6], S22, 0xc040b340); GG (c, d, a, b, x[11], S23, 0x265e5a51); GG (b, c, d, a, x[ 0], S24, 0xe9b6c7aa); GG (a, b, c, d, x[ 5], S21, 0xd62f105d); GG (d, a, b, c, x[10], S22, 0x2441453); GG (c, d, a, b, x[15], S23, 0xd8a1e681); GG (b, c, d, a, x[ 4], S24, 0xe7d3fbc8); GG (a, b, c, d, x[ 9], S21, 0x21e1cde6); GG (d, a, b, c, x[14], S22, 0xc33707d6); GG (c, d, a, b, x[ 3], S23, 0xf4d50d87); GG (b, c, d, a, x[ 8], S24, 0x455a14ed); GG (a, b, c, d, x[13], S21, 0xa9e3e905); GG (d, a, b, c, x[ 2], S22, 0xfcefa3f8); GG (c, d, a, b, x[ 7], S23, 0x676f02d9); GG (b, c, d, a, x[12], S24, 0x8d2a4c8a); HH (a, b, c, d, x[ 5], S31, 0xfffa3942); HH (d, a, b, c, x[ 8], S32, 0x8771f681); HH (c, d, a, b, x[11], S33, 0x6d9d6122); HH (b, c, d, a, x[14], S34, 0xfde5380c); HH (a, b, c, d, x[ 1], S31, 0xa4beea44); HH (d, a, b, c, x[ 4], S32, 0x4bdecfa9); HH (c, d, a, b, x[ 7], S33, 0xf6bb4b60); HH (b, c, d, a, x[10], S34, 0xbebfbc70); HH (a, b, c, d, x[13], S31, 0x289b7ec6); HH (d, a, b, c, x[ 0], S32, 0xeaa127fa); HH (c, d, a, b, x[ 3], S33, 0xd4ef3085); HH (b, c, d, a, x[ 6], S34, 0x4881d05); HH (a, b, c, d, x[ 9], S31, 0xd9d4d039); HH (d, a, b, c, x[12], S32, 0xe6db99e5); HH (c, d, a, b, x[15], S33, 0x1fa27cf8); HH (b, c, d, a, x[ 2], S34, 0xc4ac5665); II (a, b, c, d, x[ 0], S41, 0xf4292244); II (d, a, b, c, x[ 7], S42, 0x432aff97); II (c, d, a, b, x[14], S43, 0xab9423a7); II (b, c, d, a, x[ 5], S44, 0xfc93a039); II (a, b, c, d, x[12], S41, 0x655b59c3); II (d, a, b, c, x[ 3], S42, 0x8f0ccc92); II (c, d, a, b, x[10], S43, 0xffeff47d); II (b, c, d, a, x[ 1], S44, 0x85845dd1); II (a, b, c, d, x[ 8], S41, 0x6fa87e4f); II (d, a, b, c, x[15], S42, 0xfe2ce6e0); II (c, d, a, b, x[ 6], S43, 0xa3014314); II (b, c, d, a, x[13], S44, 0x4e0811a1); II (a, b, c, d, x[ 4], S41, 0xf7537e82); II (d, a, b, c, x[11], S42, 0xbd3af235); II (c, d, a, b, x[ 2], S43, 0x2ad7d2bb); II (b, c, d, a, x[ 9], S44, 0xeb86d391); state[0] += a; state[1] += b; state[2] += c; state[3] += d; MD5_memset ((POINTER)x, 0, sizeof (x)); } void CSecurity::Encode(unsigned char *output, UINT4 *input, size_t len ) { size_t i, j; for (i = 0, j = 0; j < len; i++, j += 4) { output[j] = (unsigned char)(input & 0xff); output[j+1] = (unsigned char)((input >> 8) & 0xff); output[j+2] = (unsigned char)((input >> 16) & 0xff); output[j+3] = (unsigned char)((input >> 24) & 0xff); } } void CSecurity::Decode(UINT4 *output, unsigned char *input, size_t len ) { size_t i, j; for (i = 0, j = 0; j < len; i++, j += 4) output = ((UINT4)input[j]) | (((UINT4)input[j+1]) << 8) | (((UINT4)input[j+2]) << 16) | (((UINT4)input[j+3]) << 24); } 分享:
2025年07月14日
0 阅读
0 评论
0 点赞
2025-07-14
MD5校验值program(2) (2008-06-09 09:20:11)
/ 这是已导出类的构造函数。// 有关类定义的信息,请参阅 Security.hCSecurity::CSecurity(){ return; }void CSecurity::MD5Init( MD5_CTX *context ) { context->count[0] = context->count[1] = 0; context->state[0] = 0x67452301; context->state[1] = 0xefcdab89; context->state[2] = 0x98badcfe; context->state[3] = 0x10325476; } void CSecurity::MD5Update(MD5_CTX *context, unsigned char *input, size_t inputLen ) { size_t i, index, partLen; index = (size_t)((context->count[0] >> 3) & 0x3F); if ((context->count[0] += ((UINT4)inputLen << 3)) < ((UINT4)inputLen << 3)) context->count[1]++; context->count[1] += ((UINT4)inputLen >> 29); partLen = 64 - index; if (inputLen >= partLen) { MD5_memcpy ((POINTER)&context->buffer[index], (POINTER)input, partLen); MD5Transform (context->state, context->buffer); for (i = partLen; i + 63 < inputLen; i += 64) MD5Transform (context->state, &input); index = 0; } else i = 0; MD5_memcpy ((POINTER)&context->buffer[index], (POINTER)&input, inputLen-i); } void CSecurity::MD5Final(unsigned char digest[16], MD5_CTX *context ) { unsigned char bits[8]; size_t index, padLen; Encode (bits, context->count, 8); index = (size_t)((context->count[0] >> 3) & 0x3f); padLen = (index < 56) ? (56 - index) : (120 - index); MD5Update (context, PADDING, padLen); MD5Update (context, bits, 8); Encode (digest, context->state, 16); MD5_memset ((POINTER)context, 0, sizeof (*context)); } void CSecurity::MD5Transform(UINT4 state[4], unsigned char block[64] ) { UINT4 a = state[0], b = state[1], c = state[2], d = state[3], x[16]; Decode (x, block, 64); FF (a, b, c, d, x[ 0], S11, 0xd76aa478); FF (d, a, b, c, x[ 1], S12, 0xe8c7b756); FF (c, d, a, b, x[ 2], S13, 0x242070db); FF (b, c, d, a, x[ 3], S14, 0xc1bdceee); FF (a, b, c, d, x[ 4], S11, 0xf57c0faf); FF (d, a, b, c, x[ 5], S12, 0x4787c62a); FF (c, d, a, b, x[ 6], S13, 0xa8304613); FF (b, c, d, a, x[ 7], S14, 0xfd469501); FF (a, b, c, d, x[ 8], S11, 0x698098d8); FF (d, a, b, c, x[ 9], S12, 0x8b44f7af); FF (c, d, a, b, x[10], S13, 0xffff5bb1); FF (b, c, d, a, x[11], S14, 0x895cd7be); FF (a, b, c, d, x[12], S11, 0x6b901122); FF (d, a, b, c, x[13], S12, 0xfd987193); FF (c, d, a, b, x[14], S13, 0xa679438e); FF (b, c, d, a, x[15], S14, 0x49b40821); 分享:
2025年07月14日
0 阅读
0 评论
0 点赞
1
...
22
23
24
...
34