Làm thế nào để tôi sha1 một chuỗi hoặc tập hợp các số trong Mục tiêu c?Mục tiêu C: SHA1
Trả lời
CommonCrypto (một khuôn khổ Apple) có chức năng tính toán SHA-1 băm, bao gồm một hash một bước:
#include <CommonCrypto/CommonDigest.h>
unsigned char digest[CC_SHA1_DIGEST_LENGTH];
NSData *stringBytes = [someString dataUsingEncoding: NSUTF8StringEncoding]; /* or some other encoding */
if (CC_SHA1([stringBytes bytes], [stringBytes length], digest)) {
/* SHA-1 hash has been calculated and stored in 'digest'. */
...
}
Đối với một tập hợp các số, chúng ta hãy giả sử bạn có nghĩa là một mảng của ints của biết chiều dài. Đối với dữ liệu như vậy, việc xây dựng thông tin tiêu hóa dễ dàng hơn để lặp đi lặp lại thay vì sử dụng chức năng một lần:
unsigned char digest[CC_SHA1_DIGEST_LENGTH];
uint32_t *someIntegers = ...;
size_t numIntegers = ...;
CC_SHA1_CTX ctx;
CC_SHA1_Init(&ctx);
{
for (size_t i = 0; i < numIntegers; i++)
CC_SHA1_Update(&ctx, someIntegers + i, sizeof(uint32_t));
}
CC_SHA1_Final(digest, &ctx);
/* SHA-1 hash has been calculated and stored in 'digest'. */
...
Lưu ý rằng điều này không tính đến độ tuổi. SHA-1 được tính toán với mã này trên hệ thống PowerPC sẽ khác với hệ thống được tính toán trên hệ thống i386 hoặc ARM. Giải pháp là đơn giản - trao đổi các byte của các số nguyên cho một endianness biết trước khi thực hiện việc tính toán:
for (size_t i = 0; i < numIntegers; i++) {
uint32_t swapped = CFSwapInt32HostToLittle(someIntegers[i]); /* or HostToBig */
CC_SHA1_Update(&ctx, &swapped, sizeof(swapped));
}
Crypto thông thường không tách rời SDK nữa – Daniel
Kể từ 4.0.2, đúng vậy. Đi trước và thử nó! –
Tất nhiên, đây là một điều cụ thể của iOS. Nó không đi kèm với ngôn ngữ Objective-C. –
SHA1 không thực sự đi kèm với Mục tiêu-C. Bạn có thể sử dụng mã nguồn C cho hashdeep
và bạn bè, được cấp phép theo miền công cộng (Vì nó được viết bởi một nhân viên của chính phủ Hoa Kỳ): http://md5deep.sourceforge.net/.
Một tùy chọn khác sẽ là libgcrypt, từ các nhà sản xuất của GnuPG (http://www.gnupg.org/related_software/libraries.en.html#lib-libgcrypt). – schot
Có mã hóa bảo mật nào được hỗ trợ trực tiếp cho obj c và php không? – Daniel
@schot: Nhưng libcrypt có giấy phép hạn chế hơn nhiều. @ Daniel: Không ra khỏi hộp, không. Mục tiêu-C không đi kèm với nhiều thư viện. –
Một giải pháp với một thư viện tiêu hóa tin nhắn (nv-ios-tiêu hóa):
(1) string
// Create an SHA1 instance, update it with a string and do final.
SHA1 sha1 = [SHA1 sha1WithString:@"Hello"];
// Get the pointer of the internal buffer that holds the message digest value.
// The life of the internal buffer ends when the SHA1 instance is discarded.
// Copy the buffer as necessary. The size of the buffer can be obtained by
// 'bufferSize' method.
unsigned char *digestAsBytes = [sha1 buffer];
// Get the string expression of the message digest value.
NSString *digestAsString = [sha1 description];
(2) số
// Create an SHA1 instance.
SHA1 sha1 = [[SHA1 alloc] init];
// Update the SHA1 instance with numbers.
// (Sorry, the current implementation is endianness-dependent.)
[sha1 updateWithShort:(short)1];
[sha1 updateWithInt:(int)2];
[sha1 updateWithLong:(long)3];
[sha1 updateWithLongLong:(long long)4];
[sha1 updateWithFloat:(float)5];
[sha1 updateWithDouble:(double)6];
// Do final. 'final' method returns the pointer of the internal buffer
// that holds the message digest value. 'buffer' method returns the same.
// The life of the internal buffer ends when the SHA1 instance is discarded.
// Copy the buffer as necessary. The size of the buffer can be obtained by
// 'bufferSize' method.
unsigned char *digestAsBytes = [sha1 final];
// Get the string expression of the message digest value.
NSString *digestAsString = [sha1 description];
Thư viện thông báo thư hỗ trợ MD5, SHA-1, SHA-224, SHA-256, SHA-384 và SHA-512.
[Blog] nhắn tiêu hóa (MD5, SHA1, vv) trên iOS với các lớp học dành riêng
http://darutk-oboegaki.blogspot.jp/2013/04/message-digests-md5-sha1-etc-on-ios.html
[Thư viện] nv-ios-tiêu hóa
https://github.com/TakahikoKawasaki/nv-ios-digest
- 1. Android HMAC-SHA1 Khác với Tiêu chuẩn Java HMAC-SHA1
- 2. Mục tiêu C ORM
- 3. Mục tiêu-C respondsToSelector
- 4. Thư viện mật mã phù hợp với mục tiêu-C
- 5. Tiêu chuẩn mã hóa mục tiêu-C?
- 6. Tài liệu tiêu chuẩn mục tiêu-C
- 7. Phân tích tiêu đề mục tiêu-C
- 8. Lượt xem tải trước mục tiêu C iOS mục tiêu
- 9. Chỉ mục NSStringOf trong Mục tiêu-C
- 10. Sự khác biệt giữa C++, mục tiêu-c và mục tiêu-C++ là gì?
- 11. Mục tiêu-C cheat sheet
- 12. Mục tiêu-C Nhiều Initialisers
- 13. Mục tiêu C Boolean Array
- 14. Mục tiêu-c Server Side
- 15. IDE cho mục tiêu C
- 16. urldecode trong mục tiêu-c
- 17. REPL cho mục tiêu-C
- 18. Mục tiêu-C getter/setter
- 19. Mục tiêu c, NSMutableArray: indexOfObject
- 20. dealloc trong mục tiêu C
- 21. pi trong Mục tiêu C
- 22. Con trỏ mục tiêu-C?
- 23. Luồng trong Mục tiêu-C
- 24. Mục tiêu-C và PhoneGap
- 25. Lint cho mục tiêu-C?
- 26. Math.min trong mục tiêu c
- 27. Biên dịch C# thành mục tiêu-C
- 28. Sử dụng C++ trong mục tiêu C++?
- 29. Thư viện băm MD5 và SHA1 C++
- 30. C# để mã hóa Ruby sha1 base64
Câu hỏi này nổi bật tương tự như http://stackoverflow.com/questions/756492/objective-c-sample-code-for-hmac-sha1. Chưa có câu trả lời nào ở đó, nhưng tôi đăng bài vì mục đích hoàn chỉnh. – Eli
Đây có phải là một nền tảng cụ thể không? – ThomasW
@ThomasW Mac os x chỉ – Daniel