小编use*_*778的帖子

Delphi中如何将2个字节转换为1个16位数字?

所以我有2个字节,例如:13, 61

我想将它们转换成16位:3389

现在我正在使用该功能:

function IntPower(const N, k: integer): integer;
var
  i: Integer;
begin
  Result:= (256 * N) + k;
end;
Run Code Online (Sandbox Code Playgroud)

Delphi 有没有更好的方法来做到这一点?

delphi

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

为什么这么多指针?

在搜索Win32 LDAP API函数的引用时,我发现了以下JwaWinLDAP.pas单元.

在此单元上,声明函数ldap_search_st:

function ldap_search_st(ld: PLDAP; base: PAnsiChar; scope: ULONG;
  filter, attrs: PAnsiChar; attrsonly:  ULONG; var timeout: TLDAPTimeVal;
  var res: PLDAPMessage): ULONG; cdecl;
Run Code Online (Sandbox Code Playgroud)

超时:TLDAPTimeVal参数声明为:

  PLDAPTimeVal = ^TLDAPTimeVal;
  l_timeval = packed record
    tv_sec: Longint;
    tv_usec: Longint;
  end;
  LDAP_TIMEVAL = l_timeval;
  PLDAP_TIMEVAL = ^LDAP_TIMEVAL;
  TLDAPTimeVal = l_timeval;
Run Code Online (Sandbox Code Playgroud)

在代码上,如果我使用类似的东西:

procedure foo;
var
  TimeVal: PLDAPTimeVal;
begin
 ldap_search_st(foo1, Nil, 0, PAnsiChar('(objectClass=*)'), Nil, 0, TimeVal, foo2);
end;
Run Code Online (Sandbox Code Playgroud)

编译器给我错误:

[dcc32错误]实际和正式var参数的类型必须相同

因为超时参数.如果我将TimeVal类型更改为TLDAPTimeVal,它将编译并且应用程序正常工作.

问题是:当我在Delphi中看到类型声明时,它们总是如下:

type
 PType1 = ^Type1
 Type1 = …
Run Code Online (Sandbox Code Playgroud)

delphi

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

从 Cryptico.js 中提取 RSA 私钥

我相信这是一个非常基本的问题,但我正在开始研究 JavaScript 和 RSA,所以我有点迷茫。我刚刚下载了库 Cryptico,它为我提供了一个易于使用的 RSA 密钥生成/加密/解密。生成的 RSA 密钥的公共部分,只需使用以下命令即可轻松提取:

publicKeyString(RsaKey)

这是:

my.publicKeyString = function(rsakey) 
{
    pubkey = my.b16to64(rsakey.n.toString(16));
    return pubkey; 
}
Run Code Online (Sandbox Code Playgroud)

在函数中生成密钥时定义了 rsakey.n:

function RSAGenerate(B, E)
{
    var rng = new SeededRandom();
    var qs = B >> 1;
    this.e = parseInt(E, 16);
    var ee = new BigInteger(E, 16);
    for (;;)
    {
        for (;;)
        {
            this.p = new BigInteger(B - qs, 1, rng);
            if (this.p.subtract(BigInteger.ONE).gcd(ee).compareTo(BigInteger.ONE) == 0 && this.p.isProbablePrime(10)) break;
        }
        for (;;)
        {
            this.q = new BigInteger(qs, 1, rng);
            if …
Run Code Online (Sandbox Code Playgroud)

javascript rsa cryptico

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

在套接字上发送正确的记录大小

我有这个记录:

type
  TSocks5_Packet = record
    Socks_ID: String[6];
    Socks_Packet: array of byte;
  end;
Run Code Online (Sandbox Code Playgroud)

我把String [6]因为我确定这个字符串总是有6个字符(并尝试方便我的工作,但还不够).

我试着在这里发送这条记录:

procedure TForm1.SocksServerClientRead(Sender: TObject;
  Socket: TCustomWinSocket);
var
  Socks5_Request: TSocks5_Packet;
begin
  SetLength(Socks5_Request.Socks_Packet, Socket.ReceiveLength);
  Socket.ReceiveBuf(Socks5_Request.Socks_Packet[0], Length(Socks5_Request.Socks_Packet));
  Socks5_Request.Socks_ID:= PSocket_Identity(Socket.Data).Sock_ID;
  TunnelClient.SendBuf(Socks5_Request, Length(Socks5_Request.Socks_Packet + Length(Socks5_Request.Socks_ID)));
end;
Run Code Online (Sandbox Code Playgroud)

我很确定问题出在SendBuf第二个参数上,其中我指定了要发送的字节数.什么是正确的方法,以及我应该如何学习它?

delphi

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

标签 统计

delphi ×3

cryptico ×1

javascript ×1

rsa ×1