Попробуйте это:
NSString *str = @"___asdf.SHiv._.l.asg. g.g._ASdgASG_.......asfgads.g. .._____fdgdsfghsdfgh";
str= [str stringByReplacingOccurrencesOfString:@"." withString:@""];
str=[str stringByReplacingOccurrencesOfString:@"_" withString:@""];
str=[str stringByReplacingOccurrencesOfString:@" " withString:@""];
str=[str stringByTrimmingCharactersInSet:[NSCharacterSet alphanumericCharacterSet]];
if ([str isEqualToString:@""]) {
NSLog(@"valid");
}
else {
NSLog(@"invalid");
}
Из командной строки это просто:
printf "compute sha1" | openssl sha1
Вы можете вызвать библиотеку следующим образом:
#include <stdio.h>
#include <string.h>
#include <openssl/sha.h>
int main()
{
unsigned char ibuf[] = "compute sha1";
unsigned char obuf[20];
SHA1(ibuf, strlen(ibuf), obuf);
int i;
for (i = 0; i < 20; i++) {
printf("%02x ", obuf[i]);
}
printf("\n");
return 0;
}
OpenSSL имеет ужасную документацию без примеров кода, но вот вы:
#include <openssl/sha.h>
bool simpleSHA256(void* input, unsigned long length, unsigned char* md)
{
SHA256_CTX context;
if(!SHA256_Init(&context))
return false;
if(!SHA256_Update(&context, (unsigned char*)input, length))
return false;
if(!SHA256_Final(md, &context))
return false;
return true;
}
Использование:
unsigned char md[SHA256_DIGEST_LENGTH]; // 32 bytes
if(!simpleSHA256(<data buffer>, <data length>, md))
{
// handle error
}
После этого md
будет содержать двоичный SHA-256 дайджест сообщений. Аналогичный код можно использовать для других членов семейства SHA, просто замените «256» в коде.
При наличии больших объемов данных, конечно, следует подавать порции данных по мере их поступления (несколько вызовов SHA256 _ Update
).