0

所以我正在对 Web 服务进行一些身份验证。我得到的代码示例是 .NET C#,这是我从未使用过的一种语言。

我需要一些帮助来理解 C# 中发生的事情,以便我可以在 Objective C 中复制它。txtUserPwd 是一个包含用户密码的文本框。txtRecivedIV 是从另一个服务中提取的 IV(稍后会进行一些加密)。

// Pad entered password to multiple of 16
int padLen = 16 - (txtUserPwd.TextLength % 16);
int totalWidth = txtUserPwd.TextLength + padLen;
byte[] password = textConverter.GetBytes(txtUserPwd.Text.PadRight(totalWidth, (char) padLen));

// Decode entered IV
byte[] decodedIV = Convert.FromBase64String(txtReceivedIV.Text);

我猜第一部分用一些空格填充字符串,但我不确定有多少空格或在哪里。我猜第二部分将接收到的 IV 从 Base64 转换为文本,然后将其转换为字节字符串?

谢谢你的帮助!

4

2 回答 2

2

int padLen = 16 - (txtUserPwd.TextLength % 16)

设置padLen为超过密码长度的 16 的差值txtUserPwd.TextLength和最接近的倍数。如果密码是 8 个字符,那就是。如果密码为 12 个字符,则为padLen4。如果密码为 20 个字符,则为 12。

int totalWidth = txtUserPwd.TextLength + padLen;

只是总结一些东西。

byte[] password = textConverter.GetBytes(txtUserPwd.Text.PadRight(totalWidth, (char) padLen));

让我们分解一下。txtUserPwd.Text.PadRight(totalWidth, (char) padLen)应该只是将值填充到总长度totalWidth。这将使它的长度为 16 个字符的倍数。textConverter.GetBytes会将填充的字符串转换为字节数组。可能使用默认编码。所有填充都添加到字符串的末尾。

byte[] decodedIV = Convert.FromBase64String(txtReceivedIV.Text);

这只是将 base64 字符串转换为字节数组。

于 2013-08-29T11:20:33.817 回答
0

第一部分确保长度是 16 的任意倍数。其余部分是base64 编码

于 2013-08-29T11:16:38.220 回答