所以我正在对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转换为文本,然后将其转换为字节串?
感谢您的帮助!
答案 0 :(得分:2)
int padLen = 16 - (txtUserPwd.TextLength % 16)
将padLen
设置为txtUserPwd.TextLength
与超出密码长度的最接近的16的倍数之间的差值。如果密码是8个字符,那就是。如果密码为12个字符,padLen
将为4.如果密码为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字符串转换为字节数组。
答案 1 :(得分:0)
第一部分确保长度为16的任意倍数。其余为base64 encoding。