使用 ASCII 控制字符填充字符串 - 目标 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。文本),并使用缺失字符的总数作为字符十进制将其填充为 16 的倍数。然后,它将其转换为基数 64 并将其放入文本框中。假设示例密码是test12,输出将是:

dGVzdDEyCgoKCgoKCgoKCg==

我想在目标 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

所以它离最终输出不远了,我无法弄清楚的是如何使用所需的长度作为字符来填充它。

任何帮助将不胜感激,它可能(希望)非常简单,但我只是无法弄清楚如何完成它。

谢谢!

亚当

for 循环的目的是将 添加到字符串中。

循环后你做

Password = [Password stringByReplacingOccurrencesOfString:@"n" withString:@""];

这将添加的 替换为任何内容 = 删除它们。

顺便说一句:使用带有 15 的字符串文字,然后将带有填充长度的子字符串添加到源字符串中会更容易:

int padding = 16 - ([Password length] % 16);
password = [password appendString:[@"nnnnnnnnnnnnnnn" substringToIndex:padding]];

好的,所以这直勾勾地盯着我的脸。真的有点傻,但仍然如此。我最终做的是这样的:

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

相关内容

最新更新