导航:首页 > 数据处理 > 程序压缩数据怎么跑

程序压缩数据怎么跑

发布时间:2022-11-12 07:39:55

① 如何用命令行实现压缩

请参考

VFP中压缩工具WinRAR的调用
-------------------------------------------
压缩:

DELETE FILE bak.jhz
RUN /N7 WinRAR.exe a -ibck -r -k -o+ -y -hp123 -p123 bak.jhz dbf\*.*

RUN /N7 WinRAR.exe a -ibck -r -o+ -y -hp123 -p123 bak.jhz dbf\*.*

解压:

RUN /N7 WinRAR.exe x -ibck -r -k -o+ -y -hp123 -p123 bak.jhz dbf\*.*

RUN /N7 WinRAR.exe x -ibck -r -o+ -y -hp123 -p123 bak.jhz dbf\*.*

参数说明:
a:添加到档案文件中
x:从档案文件中全路径释放文件

-ibck:后台运行WinRAR
-r:连同子文件夹操作
-k:锁定档案文件
-o+:覆盖已经存在的文件
-y:对所有询问均回应为“是”
-hp123:加密文件数据和文件头,密码为123
-p123:设置密码为123,此密码上一个密码可以不一样

bak.jhz:压缩后的文件名或要解压的文件(.jhz为自定义扩展名)
dbf\*.*:要压缩的文件或要解压到的文件位置

更详细参数请参考:WinRAR中帮助文件

--------------------------------------------------
在实际应用中,如果Foxpro管理的数据库,表文件较多,占用空间较大,并且其长度又具有不确定性或不定增长性(如:明细帐),这样,一个表的字节数就可能超过一张软盘的容量,而Foxpro的拷贝命令又不能支持自动分卷连续备份,因此,这就给数据库的软盘备份与恢复带来一定的困难。如果能在Foxpro环境下,运用一种压缩算法,编写一个高效实用的压缩工具,那当然是最好的解决方案,遗憾的是笔者作过尝试却未获成功,在此,笔者采取了调用基于DOS的压缩工具软件ARJ.exe,实现了压缩分卷备份和分卷解压缩恢复的功能,现将具体实现方法概述如下,以供探讨。

一、定制ARJ运行环境
在Foxpro for Windows环境中,提供了运行外部命令或程序的命令:Run。如果Run中指定的程序没有扩展名,Foxpro for Windows首先查找指定名称的程序信息文件(后缀为PIF)。PIF允许在Windows下运行非Windows程序,并且可以指定其运行参数:程序是在窗口中运行还是全屏幕运行以及内存分配等。如果找到了相应的PIF,则使用其中指定的参数运行PIF中的程序;当找不到PIF时,就使用安装在Foxpro for Windows目录中的PIF文件FOXRUN.PIF。FOXRUN.PIF对程序在Windows中运行做了一些设置。因此,我们可以依据该文件,定制自己的PIF文件,不妨命名为:Arj_backup.pif。假设工作目录为:C:\VfFP50\DATA,备分批处理文件为:d_backup.bat,恢复批处理文件为:d_restore.bat ,ARJ.EXE也已拷贝至该目录下。
● file c:\vfp50\foxrun.pif to arj_backup.pif
● modi file d_backup.bat (使其包含以下语句)
cd c:\v fp50\data
arjva -va -a -y bak_data
exit(退出批处理操作)
●modi file d_restore.bat (使其包含以下语句)
cd c:\vfp50\data
arj x -va -a -y bak_data
exit
ARJ参数说明:
-va:使用A驱软盘上所有自由空间执行压缩任务。可以将a改为1440或1200,则以1.44M或1.22M大小分割备份文件。
-a:对所有属性的文件都能进行处理,包括隐含文件。
-y:对所有程序提问,都默认按肯定回答,直接执行。
-x:解压释放压缩文件。
Arj_backup.PIF 配置方法说明:
修改PIF配置的进入方法有两种,一种方法是:当激活Arj_backup,出现运行窗口时,用鼠标右键单击窗口或屏幕底部对应任务栏,选择属性按钮,进入配置页面。另一种方法是:用“资源管理器”找到对应的PIF文件,单击鼠标右键,选择属性按钮,进入配置页面进行设置。由于配置内容较多,在此不能一一详述,仅就运行本程序可能涉及的几项参数做一介绍。
● 程序:
1.第一行为运行窗口标示,可设定为:正在进行数据文件压缩……
2.命令行:Command.com(DOS命令处理程序,不需改动)
3.工作目录:C:\vfp50\data(备份目录)
4.批处理文件:D_backup.bat
5.快捷键:
6.运行:小窗口
7.高级属性设置:选定“建议使用MS—DOS方式”复选框,此项配置的功能是:在运行此程序时,Windows检测该程序是否要在MS-DOS方式下运行。如果是这样,Windows将运行向导程序来安装自定义图标以便运行此程序。否则,如果程序需要在MS-DOS方式下运行,但是未复选此项,该程序可能无法正常运行。
8.更改图标:可以为此运行窗口任意选定图标。
9.选定“退出时关闭”复选框,此项配置的功能是:指定程序执行完后是否关团MS-DOS窗口。如果未复选 此框,MS-DOS窗口将保持打开状态。
● 屏幕:
窗口:选定“在启动时恢复设置”复选框,此项配置的功能是:退出此程序时保存窗口设置,包括窗口的大小、位置和字体。否则,运行窗口不能被任意托放,影响整体界面布局。
● 杂项:
鼠标:“独占方式”复选框,此项配置的功能是:单击此处可以使该程序独占鼠标。在该程序运行期间,鼠标指针被隐藏,鼠标功能失效,退出后,鼠标功能自动恢复正常。
与此类似,Arj_restore.PIF的配置方法亦可如法炮制,只需将“程序”中的“批处理文件”改为:D_restore.bat即可。
PIF运行窗口的位置、大小,可以手工托放、调整,如果想隐藏该窗口,可以将它缩至最小,再拖至屏幕右下角。
上述配置设定完成以后,按“确定”按钮退出配置页面。此时,ARJ运行环境定制完成。

二、Foxpro程序调用
1.提供软盘备份、硬盘备份(备份到硬盘C:\backup目录下)两种方式。
2.软盘备份前,先在硬盘调用ARJ压缩分卷,并创建一个文本文件(date_backup)用于记录备份时间、备份文件数量、所需软盘数量,以便用户据此判断是否压缩成功并进行软盘备份;恢复时,也首先打开软盘上的该文本,显示备份时间、备份文件数量、所需软盘数量,由用户据此确定是否进行软盘恢复。备份或恢复时,如果中途某张盘出现故障,或顺序错误,均允许“重试?”。
3.软盘恢复时,检查每张盘的备份时间是否与上张盘一致,并检查其装入顺序是否正确。确保备份数据的时效性、完整性。
4.软盘恢复时,先在非工作目录下进行,全部工作完成并确认无误后,再移入工作目录,这样,可以避免数据库的不完全覆盖而造成的损坏。
5.出错时激活故障处理例程err_proc,置出错标志,退出处理。

---------------------------------------------------------------命令S为自释放格式如:

RUN /N7 WinRAR.exe S -ibck -r -k -o+ -y bak.EXE dbf\*.*

② 如何用C语言编写暴力破解压缩文件解压密码的程序

由于有一个重要的Rar文件,极需解开,首先试用了ARPC,但是解压的速度极慢,每秒只有30个左右,所以断了穷举破解的念头,却仍不死心,因为我从不崇尚穷举破解的方法,除非每秒可以跑几千万次的,我或许可以一试,所以决定研究一下Winrar3.x密码算法,以期是否可以破解该密码。查看了网络上的资料,包括看雪FAQ里的回答,都声称只能用穷举法破解,起先并不理解,但通过研究,我理解了看雪前辈们在FAQ里所说的原因,不禁让我佩服

Winrar加密思路的成熟。虽然研究的结果没有什么新意,但我还是决定把我的研究结果与大家一起分享,为那些仍然以为winrar密码可以象破解注册码一样的,通过修改winrar弹出框之类的更改文件流程指向可以达到跳过密码检验的朋友,做一个简要的说明。

一、Rar文件生成的流程。
Winrar加密文件时,总的分两个步骤:
1:先把源文件压缩,压成一段数据段。
2:再将压缩完的数据段加密。
对于同一个源文件来说,不进行加密,压缩完,其rar文件中的数据段是一模一样的。但是如果对同一个源文件来说,即使使用同一个密码,加密完rar文件中的数据段是不一样的,这是由于加密的密钥是依赖于一个Salt(8个字节的密钥,用来加密时使用,存放在rar文件头中里)
所以要解密rar加密文件关键在于数据解密这一步,那我们接下来研究一下如何加密的。
二、加密“压缩完的数据段”的流程
1、获取密钥:
将明文的密码与Salt一起,通过HASH算法,生成两个16字节的密钥。(一个是KEY(AES算法的参数),一个是initVector)
2、以Key和initVector来加密压缩数据:
这里,是一个循环加密的结构,每16字节作为一个块,进行加密(这可能正是为什么加密完的文件长度总为16倍数的原因)。加密采用AES算法(RAR采用的是AES的rijndael的标准应用)。这里注意:AES加密前,有一个异或运算,是先将每16字节块与上一个16字节块加密结果进行异或,然后再进行AES算法的。我用一个简单的示意代码看说明:
;===============================================
packblock[0]=packblock[i]^initVector
encryptBlock[0]=AES(packblock[0]) ;(KEY为AES的密钥)
for i=1to 块数量-1
packblock[i]=packblock[i]^encryptBlock[i-1]
encryptBlock[i]=AES(packblock[i]);(KEY为AES的密钥)
next
;packblock[i]表示压缩完的每16字节数据
;encryptBlock[i]表示加密完的每16字节数据
;===============================================
三、解密的过程
由于AES算法是对称的,所以解密的过程,是加密过程的逆运算。但解密时AES算法过程与加密所用的不一样(是因为解密过程中由KEY生成的子密钥表不一样)。仍然需要我们将密码输入,与salt一起生成两个16字节密钥,KEY和initVector。

;===============================================
packblock[0]=AES1(encryptBlock[0]) ;(KEY为AES的密钥)
packblock[0]=packblock[i]^initVector
for i=1to 块数量-1
packblock[i]=AES1(encryptBlock[i]) ;(KEY为AES的密钥)
packblock[i]=packblock[i]^encryptBlock[i-1]

next
;===============================================
那判断密码是否正确的在什么地方呢?
解密的过程是解密后的数据块进行解压缩,然后解成源文件,对该文件进行CRC校验,存在RAR文件中的源文件CRC校验码比较,相同则密码正确,不相同则密码错误。

四、无法秒破的原因
从上面,我们了解了RAR文件的整体思路。地球人都知道,解密时,肯定有个步骤是来判断密码的正确与否。而且,依据以往的经验,我们也许可以将某些判断的点移动,那样可以缩减破解的流程思路。那RAR的这一步在哪里?它把校验放在了最后的一步。如果要秒破,我们该怎么做泥?至少我认为目前是不可能的。
我们从解密过程逆反过来看看:
1、CRC检验这一块修改跳转?根本毫无意义,因为它已经是最后一步了。你可以修改RAR文件头的CRC值,你可以将它改得和你用任意密码解压出来的文件CRC值一样,但你的文件根本就不是原来的文件了。可能已经完全面目全非了。所以,对这一过程不可行。CRC校验本身是不可逆的
2、那么把判断提前到压缩完的数据?
解压的时候,有没有什么来判断压缩数据是否正确?压缩完的数据,有没有固定的特征,是否可以做为解压的判断,在这一步里,我们也无法找到有效的可用的固定特征。因为这一步涉及到RAR的压缩算法。即使一个源文件,即使你的文件前一部分是完全相同的,只对后面的部分进行改过,那么压缩完,数据也是完全一样的。因为压缩完的数据首先是一个压缩表,后面是编码。文件不一样,扫描完的压缩表也不一样,编码又是依赖于压缩表,所以,这里头找不到压缩完的数据有任何的固定特征可以用来判断的。
不管压缩数据是什么样的,Winrar都一如既往地进行解压,没有进行压缩数据是否有效的判断。
3、那假如我们破解了AES了泥?
由于AES只依赖于KEY,如果AES算法被破解了,我们知道了KEY,我们可以解出压缩完的数据,但是这里有一个问题,还有一个initVector密钥,用来第一个16字节块的异或,你没有initVector参数,你第一个16字节块的数据便无法解得出来。
4、那就只能从第一步Hash的算法入手
即使你能破解hash,但hash后的结果泥?没有结果,你怎么返推密码。

所以综上,我发现rar的加密是由hash和AES两种算法互相牵制,而两种算法当前都无法破解,至少目前还没有办法秒破,也理解了看雪高手讲的道理。
五、对穷举提高算法效率的一些设想。
我用汇编写完了RAR穷举解密的算法模块,但是如何提高效率,优化穷举的速度泥?我有如下的想法:
1、从压缩数据里找寻特征,省掉解压缩、CRC检验代码和生成initVector生成代码。目前,通过多次实验,我找到的一个特征(不知道这个是否正确),即解密完的最后一个16字节块的最后一个字节必须为0。因为经过多次的试验,我发现有加密的数据段长度都会比未加密前的数据长,那么,最后一个

16个字节的数据块解密完,多出的部分就都为0,但多出几个字节泥?多次实验,长度不一,我试想着从加密数据段最后一个16个字节块着手,只解这一块,看是否一个字节为0,这样,只解密16个字节的数据,来大大提高效率?如果能进行到这一步了,再通过解全部数据,进行CRC校验的判断。
2、如果第一个特征不成立的话,针对特定格式的压缩文件,比如doc、jpg等,部分数据固定,压缩完的数据是否存在相互牵制的数据?从而把判断提前,这一步,我不知道如何找到压缩完的数据是否存在相互牵制的数据。

③ sqlserver如何压缩数据文件空间

④ 用C语言编程:一个简单的数据压缩程序(急!!!)

#include"stdio.h"
int c1(char a[],int i)
{int c=1;
while(a[i+1]==a[i])
{c++;i++;}
return c;
}

int c2(char a[],int i)
{int c=0;
while(a[i+1]!=a[i])
{c++;i++;}
return c;
}

int len(char a[])
{ int i=0;
while(a[i]!='\0')
i++;
return i;
}

main()
{char b[100];
char a[100]={'5','5','5','8','1','3','9','9','9','9','7','2','7','2','6','6','6'};
int i=0,j=0,k=0,s,c;
while(a[i]!='\0')
{
if(a[i+1]==a[i])
{
c=c1(a,i);
b[j]=c;
b[j+1]=a[i];
i++;j++;
}
else
{ c=c2(a,i);
b[j]=-c;
for(k=0;k<c;k++)
{b[j+1]=a[i];
i++;j++;}
}
i+=c;
}
s=len(b);
for(j=0;j<s;j++)
printf("%d",b[j]);
}
帮我看一下,哪里错了,谢谢

⑤ 压缩加密流程

压缩是一种通过特定的算法来减小计算机文件大小的机制。这种机制是一种很方便的发明,尤其是对网络用户,因为它可以减小文件的字节总数,使文件能够通过较慢的互联网连接实现更快传输,此外还可以减少文件的磁盘占用空间。
中文名
压缩
外文名
compression
类别
计算机技术
目的
节省保存空间和传输时间
按文件分类
图片压缩、文本压缩
快速
导航
原理重复压缩软件和格式文件压缩机制图像压缩技术
基本介绍
压缩(compression)是为了减少数据大小以节省保存空间和传输的时间。为了数据的传输,压缩能够作用于单独的数据内容或者所有的传输单元(包括数据头),这取决于一些特定的因素。
内容压缩很简单,它就是移除多余的空白字符,插入单个的重复字符指出一个字符串中重复的字符,以及将小型的位串用频繁使用的字符替代。这种类型的压缩能够将文本文件的大小减少50%。压缩由使用特定公式和算法的程序来执行,它确定如何压缩和解压数据。[1]
原理
利用算法将文件有损或无损地处理,以达到保留最多文件信息,而令文件体积变小。压缩文件的基本原理是查找文件内的重复字节,并建立一个相同字节的"词典"文件,并用一个代码表示,比如在文件里有几处有一个相同的词"中华人民共和国"用一个代码表示并写入"词典"文件,这样就可以达到缩小文件的目的软件。由于计算机处理的信息是以二进制数的形式表示的,因此压缩软件就是把二进制信息中相同的字符串以特殊字符标记来达到压缩的目的。为了有助

⑥ 如何用程序实现Access数据库的压缩,vc+ado实现

ADO压缩access数据库:

1.头文件加一行:
#import "C:\PROGRAM FILES\COMMON FILES\System\ado\MSJRO.DLL" no_namespace

2.代码:
...
try
{
IJetEnginePtr jet(__uuidof(JetEngine));
jet->CompactDatabase(
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:\\nwind2.mdb",
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:\\abbc.mdb;" \
"Jet OLEDB:Engine Type=4");
}
catch(_com_error &e)
{
::MessageBox(NULL, (LPCTSTR)e.Description( ), "", MB_OK) ;
}

具体 看 http://topic.csdn.net/t/20030521/14/1814041.html

⑦ 如何用C++程序编写数据压缩系统

bmp转成jpg也是压缩哦!
/**********************bmp位图转jpeg begin*************************

begin
abitmap := tbitmap.Create;
od1.Filter := '位图文件|*.bmp';
if od1.Execute then
filename := od1.filename
else
Exit;
bsSkinGroupBox1.Caption := filename;
abitmap.LoadFromFile(filename);
Image1.Picture.Assign(abitmap);
ajpg := tjpegimage.Create;
ajpg.Assign(abitmap);
ajpg.CompressionQuality := 75;
ajpg.Compress;
Sd1.Filter := 'jpg文件|*.jpg';
if Sd1.Execute then
ajpg.SaveToFile(Sd1.filename + '.jpg');
ajpg.Free;
abitmap.Free;
end;
//**********************bmp位图转jpeg end*************************
另外,站长团上有产品团购,便宜有保证

⑧ c语言编写文件压缩程序的设计思路 急啊

这个,我觉得应该找一个成熟的库,看需求了,比如Huffman算法的,或者直接开源的zlib之类的,然后你的c调用库的API接口,就可以了。其实你的c代码只是对库的功能的一个简单封装,最多提供一些带压缩的文件从哪里来,要放到哪里去这些。数据压缩是一个很大的课题,看你的需求了。

⑨ java编程:数据压缩规则

你是不是问如何编写一个程序来压缩数据?如果你是想解决这个问题的话,继续往下看,如果你只是想要应付考试的话就算了。

—— 分割线

JDK本身提供了数据压缩的一个API

java.util.zip.Deflater.deflateBytes(byte[] b, int off, int len)

以下是我使用的一个例子,有点多,注释看不懂可以问我,不知道怎么用可以问我,其他的就算了。

/**
* threshold value for compress
*/
public static final int THRESHOLD = 1200;

/**
* Answer a byte array compressed in the DEFLATER format from bytes.
*
* @param bytes
* a byte array
* @return byte[] compressed bytes
* @throws IOException
*/
public static byte[] compress(byte[] bytes)
{
// Create the compressor with highest level of compression
Deflater compressor = new Deflater();
compressor.setLevel(Deflater.BEST_COMPRESSION);

// Give the compressor the data to compress
compressor.setInput(bytes);
compressor.finish();

// Create an expandable byte array to hold the compressed data.
// You cannot use an array that's the same size as the orginal because
// there is no guarantee that the compressed data will be smaller than
// the uncompressed data.
ByteArrayOutputStream bos = new ByteArrayOutputStream(bytes.length);

// Compress the data
byte[] buf = new byte[1024];
while (!compressor.finished())
{
int count = compressor.deflate(buf);
bos.write(buf, 0, count);
}
try
{
bos.close();
}
catch (IOException e)
{
}

// Get the compressed data
byte[] compressedData = bos.toByteArray();
return compressedData;
}

/**
* Answer a byte array that has been decompressed from the DEFLATER format.
*
* @param bytes
* a byte array
* @return byte[] compressed bytes
* @throws IOException
*/
public static byte[] uncompress(byte[] bytes)
{
// Create the decompressor and give it the data to compress
Inflater decompressor = new Inflater();
decompressor.setInput(bytes);

// Create an expandable byte array to hold the decompressed data
ByteArrayOutputStream bos = new ByteArrayOutputStream(bytes.length);

// Decompress the data
byte[] buf = new byte[1024];
while (!decompressor.finished())
{
try
{
int count = decompressor.inflate(buf);
bos.write(buf, 0, count);
}
catch (DataFormatException e)
{
}
}
try
{
bos.close();
}
catch (IOException e)
{
}

// Get the decompressed data
byte[] decompressedData = bos.toByteArray();
return decompressedData;
}

⑩ 用C语言设计 简单的数据压缩与解压缩程序

把所有的数据先读出来,存到数组中,然后遍历:
假设已搜到前i个不同的,且第i+1个与第i个不同,已将前i个存入临时数组,i>=1。如果第i+1和第i+2个不同,则第i+1个一并按序存入临时数组。如果第i+1个和第i+2个相同,则前i个做一次压缩处理,清空临时数组。
找连续相同的有多少个容易得多,就不具体说明了
我可以帮助你,你先设置我最佳答案后,我网络Hii教你。

阅读全文

与程序压缩数据怎么跑相关的资料

热点内容
临沂代理记账多少一年 浏览:416
抚州抖音小程序开发一般多少钱 浏览:518
正规人事代理有哪些 浏览:382
猫达人微信小程序是什么 浏览:507
华为的接入技术主要有哪些 浏览:321
如何规范编辑群信息 浏览:188
云悠悠神秘交易行在哪里 浏览:537
飞机控制程序用什么编程 浏览:308
腾讯文档怎么批量筛选数据 浏览:735
cmd如何结束一个正在运行的程序 浏览:506
solidcam程序编辑后处理在哪里 浏览:755
苹果退钱信息在哪里看 浏览:829
如何快速捕捉财经信息 浏览:38
小学信息技术硬件知多少公开课 浏览:671
营销代理叫什么 浏览:106
钢铁行业怎么成一级代理商 浏览:752
纳米技术什么病都可以治吗 浏览:255
u盘安装驱动程序停止怎么办 浏览:658
问道交易猫用户登陆id是什么 浏览:355
听书的市场有哪些看法 浏览:798