小编kil*_*ode的帖子

RC4在Delphi和C?

我已经设法将RC4实现从PolarSSL移植到delphi,因为我需要在两个应用程序(C和Delphi)之间进行加密通信,但问题是,加密数据永远不会相同,两个代码都自己加密和解密数据成功但不是由另一个加密的数据.

以下是两个代码:

C代码(取自PolarSSL)

typedef struct
{
    int x;                      /*!< permutation index */
    int y;                      /*!< permutation index */
    unsigned char m[256];       /*!< permutation table */
}
arc4_context;

void arc4_setup(arc4_context *ctx, unsigned char *key, int keylen)
{
    int i, j, k, a;
    ctx->x = 0;
    ctx->y = 0;
    for( i = 0; i < 256; i++ ) ctx->m[i] = (unsigned char) i;
    j = k = 0;
    for( i = 0; i < 256; i++, k++ )
    {
        if( k >= …
Run Code Online (Sandbox Code Playgroud)

c delphi encryption delphi-7

5
推荐指数
1
解决办法
1970
查看次数

recv()直到收到NUL字节?

我正在尝试一次从服务器接收单个数据包,因为数据包的运行速度太快,并且每个数据包的大小都未定义,因此调用带有读取字节数的recv()会读取第一个数据包,也许是其中的一部分第二个数据包。由于每个数据包都以NULL终止,因此我想逐字节读取直到接收到NULL字节。

    int recvLen = 0;
    char TB;
    char recvBuffer[1024];
    while (recv(Socket, &TB, 1, 0) > 0 && TB != 0 && recvLen < 1024)
    {
        recvBuffer[recvLen] = TB;
        recvLen++;
    }
Run Code Online (Sandbox Code Playgroud)

我认为这种方法根本无效。如果服务器发送了1024个字节,recv()将被调用1024次。

在接收到NULL字符之前,是否还有其他方法可以调用recv(),或者有比我正在使用的方法更好的方法?


编辑:我在从服务器发送的数据的前面添加了数据包大小,但是现在,如果一个错误的数据包甚至有时无缘无故,数据包就会混乱,并且无法接收到正确的数据。这是我的代码

#define UPLOAD_LEN 2755
int PacketSize, recvLen;
char Size[4];
char recvBuffer[UPLOAD_LEN+1];
while(1)
{
    if(recv(Socket,Size,4,0)>0)
    {
        Size[4] = '\0';
        PacketSize = atoi(Size);
        if (PacketSize > UPLOAD_LEN || PacketSize <= 0) continue;
        recvLen = recv(Socket, recvBuffer, PacketSize, 0);
    } else recvLen = -1;
    if (recvLen > 0)
    { …
Run Code Online (Sandbox Code Playgroud)

c sockets winsockets

4
推荐指数
1
解决办法
9010
查看次数

语法突出显示示例?

是否有任何简单的代码示例或如何使richedit控件做如何做语法 - 突出显示?我尝试过SynEdit,但它对我来说非常复杂,我想知道是否有一个小代码片段可供我使用?或者只是想知道如何像IDE那样快速地完成它?

干杯;

delphi delphi-7

3
推荐指数
2
解决办法
6592
查看次数

Delphi中的自定义控件创建

我习惯于在一个表格上创建它10次,这没关系,直到我试图传递这个数字,它开始吃系统资源,无论如何我可以创建这样的组件?对于模拟器项目,需要8位来指示二进制寄存器的值

替代文字

任何帮助,评论,想法都非常感谢.TY.

delphi delphi-7 custom-component

3
推荐指数
2
解决办法
7904
查看次数

Indy10文件传输导致100%的CPU使用率

我设法通过断开连接修复一些错误,现在每当文件传输CPU使用率变为100%时,我不知道我做错了什么:S .....

const
 MaxBufferSize = 1024;

type
 TClient = class(TObject)
 public
  AContext: TIdContext;
  FileSize: Integer;
  Canceled: Boolean;
  Transfered: Integer;
  procedure ReceiveData;
  procedure Update;
 end;

procedure TForm1.IdTCPServer1Execute(AContext: TIdContext);
var
 Data: string;
 Client: TClient;
 Item: TListItem;
begin
 Data := AContext.Connection.IOHandler.ReadLn;

 //Data := 'SEND|785548' = Command + | + FileSize
 if Copy(Data, 1, 4) = 'SEND' then
 begin
  Delete(Data, 1, 5);
  Client := TClient.Create;
  Client.FileSize := StrToInt(Data);
  Client.AContext := AContext;
  Item := ListView1.Items.Add;
  Item.Caption := AContext.Connection.Socket.Binding.PeerIP;
  Item.Data := Client;
  Client.ReceiveData;
 end;
end;

procedure …
Run Code Online (Sandbox Code Playgroud)

delphi delphi-7 indy10

3
推荐指数
1
解决办法
1312
查看次数

发送带有char指针的结构?

我试图从我的C程序发送数据包到我的Delphi程序,数据大小可变,如果我使用char数据[1024]; 它将发送1024个字节,即使数据是3个字节,如果数据大于1024,它将不会发送所有它:(

struct Packet
{
    int State_;
    char *Data;
};

struct Packet MyPacket;
MyPacket.Data = (char *) calloc(8, sizeof(char));
memcpy(MyPacket.Data, "thi sis", 8); 
send(Socket, MyPacket, (int)sizeof(struct Packet), 0);
Run Code Online (Sandbox Code Playgroud)

谢谢哦,顺便说一下,我在windows下使用gcc

c sockets gcc winsock

3
推荐指数
2
解决办法
5089
查看次数

XTEA加密在C和Delphi中提供不同的输出

我在C和Delphi上编写应用程序,我在两者中都有XTEA加密,它完全相同,但问题是输出是不同的,即使delta和N是相同的.我真的不知道什么是错的

这是Delphi代码

type
  TTeaMsgBlock = array[0..1] of LongWord;
  TTeaKeyBlock = array[0..3] of LongWord;

const   
  DELTA = $9e3779b9;
  N = 32;

procedure XTeaCrypt(var V: TTeaMsgBlock; const K: TTeaKeyBlock);
var
  I: LongWord;
  S: Int64;
begin
  S := 0;
  for I := 0 to N - 1 do begin
    Inc(V[0], (((V[1] shl 4) xor (V[1] shr 5)) + V[1]) xor (S + K[S and 3]));
    Inc(S, DELTA);
    Inc(V[1], (((V[0] shl 4) xor (V[0] shr 5)) + V[0]) xor (S + K[(S shr 11) …
Run Code Online (Sandbox Code Playgroud)

c delphi encryption delphi-7

3
推荐指数
1
解决办法
2063
查看次数

Delphi/C中更快的参数传递

我有2个部分应用程序,Delphi和C,我有2个问题1.什么是将参数传递给Delphi的最快方法?

procedure name(Data: string); // Data is Copied to another location before passing so its slow
procedure name(var Data: string); // Data is Passed by pointer, Faster
procedure name(const Data: string); // unknown
Run Code Online (Sandbox Code Playgroud)
  1. 我想通过c中的指针传递参数,我有一个char数组和一个函数,我不想通过整个数组,切掉它的第一部分并通过其余部分

    void testfunction(char **Data)
    {
        printf("Data = %d\n", *Data);
        return;
    }
    
    int main()
    {
        char Data[] = "TEST FUNCTION";
        testfunction(&&Data[4]);        // Error
        return 0;
    }
    
    Run Code Online (Sandbox Code Playgroud)

谢谢

c delphi parameters parameter-passing

3
推荐指数
1
解决办法
705
查看次数

袜子4绑定请求说明

我正在阅读这个主题 http://ftp.icm.edu.pl/packages/socks/socks4/SOCKS4.protocol

我想要做的是:我有一个客户端/服务器应用程序,我想要做的是使用socks 4 BIND请求将我的服务器绑定到远程socks服务器,并使客户端连接到该socks服务器和袜子服务器将使他们连接到我的服务器(至少这就是我如何理解袜子BIND请求)

但我不完全理解它(我的英语有点不好),我问的是,当我不知道客户的任何远程IP时,是否可以这样做?因为服务器的BIND请求包必须包含远程客户端的地址,并且我真的没有,因为客户端来自未知用户从我的服务器检索状态信息(或者我可以使用0作为INANY_ADDR)?

proxy connect socks

3
推荐指数
1
解决办法
2703
查看次数

为sprintf问题分配内存?

问题是我不知道字符串将持续多长时间,所以我不知道我应该为我的数据分配多少...

char *Data = malloc(1024*1024);  //???????
sprintf(Data, "%s %s", Data1, Data2);
Run Code Online (Sandbox Code Playgroud)

Data1和Data2的大小不时变化....从非常非常长到非常小我想知道是否有使用sprintf而不分配内存或其他东西,因为分配的内存有时可能很小..

谢谢

c

2
推荐指数
2
解决办法
4256
查看次数

在Linux上录制麦克风到wav或mp3文件?

我不知道从哪里开始,我试图在linux上录制麦克风输入,是否有可能,我的意思是我知道一切都是linux下的文件描述符,它会像用fopen/fread读取文件一样容易吗?还有,它需要root吗?

谢谢.

c linux audio-recording

2
推荐指数
1
解决办法
5404
查看次数

用C计算Var Args长度

我正在尝试移植asprintf()到Windows,因为它是Linux上的GCC库函数,并且在Windows上不存在.

我一直在计算var args的长度,所以我可以为它们分配内存.我尝试了两种方法:

  1. 将var args写入文件,然后获取函数的结果(这是写入的字节数= var args的长度),但它很愚蠢,因为用户将在他的app dir中看到内部随机数据

  2. 使用vsprintf()带有NULL 的函数作为第一个参数(将输出写入的变量),因此它返回var args的长度,但是这个失败,因为它仅适用于XP,Windows 7不允许写入NULL变量.

关于如何解决这个问题的更多想法?

c printf mingw mingw32

0
推荐指数
1
解决办法
262
查看次数

从gcc和mingw中删除不需要的代码

我注意到mingw在调用main()之前添加了很多代码,我假设它用于解析命令行参数,因为其中一个函数被称为__getmainargs(),并且还有很多字符串被添加到最终的可执行文件中,例如mingwm.dll和一些错误字符串(包括应用程序崩溃)说mingw运行时错误或类似的东西.

我的问题是:有没有办法删除所有这些东西?我不需要所有这些东西,我尝试了tcc(微小的c编译器)它完成了这项工作.但不像gcc那样跨平台(solaris/mac)

有任何想法吗?

谢谢.

c gcc mingw

0
推荐指数
1
解决办法
534
查看次数