用ASCII控制字符填充字符串 - 目标C.

时间:2014-02-13 14:11:55

标签: c# ios objective-c

好的,所以我有一些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

所以它离最终输出不远,我无法解决的是如何使用所需长度作为角色来填充它。

任何帮助都会非常感激,它可能(希望)非常简单,但我无法弄清楚如何实现它。

谢谢!

亚当

2 个答案:

答案 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);