好的,所以我有一些C#:
ASCIIEncoding textConverter = new ASCIIEncoding();
int padLen = 16 - (pwd1.TextLength % 16);
int totalWidth = pwd1.TextLength + padLen;
byte[] password = textConverter.GetBytes(pwd1.Text.PadRight(totalWidth, (char)padLen));
PaddedPassword.Text = Convert.ToBase64String(password);
所有这一切都是取一个字符串(pwd.Text)并将其填充为16的倍数,使用缺失字符的总数作为字符Decimal。然后它将其转换为base 64并将其放入文本框中。让我们说示例密码是test12,输出将是:
dGVzdDEyCgoKCgoKCgoKCg ==
我想在Objective C中复制这个功能。我尝试将字符硬编码为10作为测试,但我相信这是使用UTF-8字符代码而不是ASCII:
NSString * Password = @"test12";
int padding = 16 - ([Password length] % 16);
char ch [] = {10};
for(int i=0;i<padding;i++)
{
Password = [Password stringByAppendingString:[NSString stringWithUTF8String:(char*)ch]];
}
Password = [Password stringByReplacingOccurrencesOfString:@"\n" withString:@""];
NSLog(@"Password after padding: %@", Password);
NSLog(@"Padding: %d", padding);
NSString *base64EncodedString = [[Password dataUsingEncoding:NSUTF8StringEncoding] base64EncodedStringWithOptions:0];
NSLog(@"Encoded Padded PWD: %@", base64EncodedString);
其输出为:
dGVzdDEy
所以它离最终输出不远,我无法解决的是如何使用所需长度作为角色来填充它。
任何帮助都会非常感激,它可能(希望)非常简单,但我无法弄清楚如何实现它。
谢谢!
亚当
答案 0 :(得分:0)
for循环的目的是将\ n添加到字符串。
循环后你做
Password = [Password stringByReplacingOccurrencesOfString:@"\n" withString:@""];
替换添加的\ n,没有=删除它们。
BTW:使用15 \ n的字符串文字会更容易,然后将填充长度的子字符串添加到源字符串中:
int padding = 16 - ([Password length] % 16);
password = [password appendString:[@"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n" substringToIndex:padding]];
答案 1 :(得分:0)
好的,所以这直接盯着我。有点傻,但还是。我最终做的是:
NSString * Password = @"test12";
int padding = 16 - ([Password length] % 16);
int asciiCode = padding;
for(int i=0;i<padding;i++)
{
Password = [Password stringByAppendingString:[NSString stringWithFormat:@"%c", asciiCode]];
}
NSLog(@"Password after padding: %@", Password);
NSLog(@"Padding: %d", padding);
NSString *base64EncodedString = [[Password dataUsingEncoding:NSUTF8StringEncoding] base64EncodedStringWithOptions:0];
NSLog(@"Encoded Padded PWD: %@", base64EncodedString);