2013-08-29 21 views
0

所以我正在對Web服務進行一些身份驗證。我已經給出的代碼示例是.NET C#,這是我從未使用過的一種語言。需要將一些C#轉換爲Obj-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); 

我猜測第一部分用一些空格填充了字符串,但是我不確定有多少空白或者哪裏。我猜測第二部分將從Base64接收到的IV轉換爲文本,然後將其轉換爲字節字符串?

感謝您的幫助!

+0

由於Stack Overflow不是代碼翻譯服務,因此此問題似乎無關緊要。 – Abizern

回答

2

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

padLen至和16的最接近的倍數以外的密碼的長度txtUserPwd.TextLength之間的差。如果密碼是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字符串轉換成一個字節數組。

+0

嗨,謝謝你非常有幫助。在「PadRight(totalWidth,(char)padLen)」中,用什麼字符來填充字符串?我猜它會將填充添加到字符串的最後(右側)?再次感謝! – Compy

+0

http://msdn.microsoft.com/en-us/library/36f2hz3a.aspx表示它使用'padLen'表示的字符。它應該將其添加到字符串的右側。 – Travis

+0

確實很有幫助。非常感謝! – Compy