Jaki jest najlepszy sposób na wdrożenie BlowFish ECB szyfrowania w iOS ??? Często googlowałem i znalazłem bibliotekę here. Ale nie ma dokumentacji tej biblioteki. Nie wiem, jak z niego korzystać.Jak zaimplementować algorytm Blowfish w iOS
Odpowiedz
Mam implementację Paula Kochera z Bruce Schneier's website. A oto jak może wyglądać metoda szyfrowania:
#define PADDING_PHRASE @" "
#import "CryptoUtilities.h"
#import "blowfish.h"
#import "NSData+Base64Utilities.h"
@implementation CryptoUtilities
+ (NSString *)blowfishEncrypt:(NSData *)messageData usingKey:(NSData *)secretKey
{
NSMutableData *dataToEncrypt = [messageData mutableCopy];
if ([dataToEncrypt length] % 8) {
NSMutableData *emptyData = [[PADDING_PHRASE dataUsingEncoding:NSUTF8StringEncoding] mutableCopy];
emptyData.length = 8 - [dataToEncrypt length] % 8;
[dataToEncrypt appendData:emptyData];
}
// Here we have data ready to encipher
BLOWFISH_CTX ctx;
Blowfish_Init (&ctx, (unsigned char*)[secretKey bytes], [secretKey length]);
NSRange aLeftRange, aRightRange;
NSData *aLeftBox, *aRightBox;
unsigned long dl = 0, dr = 0;
for (int i = 0; i < [dataToEncrypt length]; i += 8) { // Divide data into octets...
// …and then into quartets
aLeftRange = NSMakeRange(i, 4);
aRightRange = NSMakeRange(i + 4, 4);
aLeftBox = [dataToEncrypt subdataWithRange:aLeftRange];
aRightBox = [dataToEncrypt subdataWithRange:aRightRange];
// Convert bytes into unsigned long
[aLeftBox getBytes:&dl length:sizeof(unsigned long)];
[aRightBox getBytes:&dr length:sizeof(unsigned long)];
// Encipher
Blowfish_Encrypt(&ctx, &dl, &dr);
// Put bytes back
[dataToEncrypt replaceBytesInRange:aLeftRange withBytes:&dl];
[dataToEncrypt replaceBytesInRange:aRightRange withBytes:&dr];
}
return [dataToEncrypt getBase64String];
}
Nie jestem naprawdę dobry w C, ale wygląda na to, że moja implementacja działa poprawnie. Aby odszyfrować, wystarczy powtórzyć te same kroki, ale zamiast Blowfish_Encrypt należy zadzwonić pod numer Blowfish_Decrypt.
Oto kod źródłowy to (zakładam, że po prostu odszyfrować tekst zaszyfrowany, ale nie radzić sobie z wyściółką tutaj):
+ (NSData *)blowfishDecrypt:(NSData *)messageData usingKey:(NSData *)secretKeyData
{
NSMutableData *decryptedData = [messageData mutableCopy];
BLOWFISH_CTX ctx;
Blowfish_Init (&ctx, (unsigned char*)[secretKeyData bytes], [secretKeyData length]);
NSRange aLeftRange, aRightRange;
NSData *aLeftBox, *aRightBox;
unsigned long dl = 0, dr = 0;
for (int i = 0; i< [decryptedData length]; i += 8) { // Divide data into octets...
// …and then into quartets
aLeftRange = NSMakeRange(i, 4);
aRightRange = NSMakeRange(i + 4, 4);
aLeftBox = [decryptedData subdataWithRange:aLeftRange];
aRightBox = [decryptedData subdataWithRange:aRightRange];
// Convert bytes into unsigned long
[aLeftBox getBytes:&dl length:sizeof(unsigned long)];
[aRightBox getBytes:&dr length:sizeof(unsigned long)];
// Decipher
Blowfish_Decrypt(&ctx, &dl, &dr);
// Put bytes back
[decryptedData replaceBytesInRange:aLeftRange withBytes:&dl];
[decryptedData replaceBytesInRange:aRightRange withBytes:&dr];
}
return decryptedData;
}
może chcesz wrócić czystych lub Base64 ciąg bajtów. Dla ostatniego przypadku mam kategorię, która dodaje inicjator, który inicjuje obiekt NSData z łańcuchem Base64 i metodą, która pozwala uzyskać ciąg Base64 z NSData.
Powinieneś także pomyśleć o graniu z PADDING_PHRASE, na przykład, jeśli chcesz dodać nie tylko kilka spacji, ale kilka losowych bajtów? W takim przypadku należy jakoś wysłać długość dopełnienia.
Aktualizacja: Właściwie nie powinien użycie PADDING_PRASE w swoim procesie. Zamiast tego należy użyć jednego ze standardowych algorytmów dla szyfrów blokowych opisanych na Wikipedia page
Uwaga na temat twojego kodu: Powinieneś tylko dodać emptyData, jeśli [dataToEncrypt length]% 8! = 0. – ggfela
To jest genialne, ale nie mogę pracować w inny sposób do odszyfrowania, czy masz przykładowy kod? – perrohunter
@ggfela, oczywiście, dziękuję. Właściwie wziąłem kurs kryptograficzny na Courserze i istniały pewne ścisłe zasady dotyczące dopełniania. Możesz przeczytać o nich w [artykuł w Wikipedii] (http://pl.wikipedia.org/wiki/Padding_ (kryptografia) #Block_cipher_mode_of_operation) i zaimplementować dowolne. – Stas
Własne API CommonCrypto firmy Apple zapewnia (między innymi) implementację Blowfish. Możesz szyfrować i odszyfrowywać w trybach CBC (domyślnie) lub ECB.
Zobacz dokumentację CommonCrypto.h, CommonCryptor.h i stronę roboczą CommonCrypto.
Pisałem natywną implementację algorytmu Blowfish, gdyż nie było wdrożenie, aby dopasować moje potrzeby jakiś czas temu
Może jest to stara sprawa, ale chcę pomóc komuś, kto potrzebuje natywną klasę dla algorytmu Blowfish .
swoje prace w pełni kompatybilny z PHP
implementacji Objective-C Blowfish
- Obsługuje tryb EBC i CBC
- Obsługuje dopełnienie RFC i wypełnianie zerami
- Works kompatybilny z PHP mcrypt
- Oryginalnie zakodowany dla SDK iOS.Może działać również dla OS X SDK
Więcej o github;
Jakie są tego zalety wynikające z używania tego, który zapewnia Apple, który został sprawdzony/etc przez ekspertów ds. Bezpieczeństwa i zostanie natychmiast naprawiony, jeśli są luki? –
Kiedy to napisałem. Nie mogłem znaleźć żadnej biblioteki blowfish, która działa kompatybilna z php na iOS. Wkrótce nie było alternatyw. To jest główny przypadek. Nie wiedziałem o opakowaniu blowfish na jabłko. Przede wszystkim jest łatwy w użyciu i łatwy do zrozumienia za sceną. Jeśli chodzi o wspieranie algorytmów z łatkami do luk w zabezpieczeniach, z pewnością wybrałbym ten z Apple. Z drugiej strony nie sądzę, że algorytm może powodować luki w zabezpieczeniach. Pomyślcie, że to tylko mała alternatywa: P Jeszcze jedną rzeczą, którą mógłbyś podać mi metody blowfish firmy apple dla SDK iOS? –
mogą występować błędy w algorytmie. To się zdarza cały czas. Jeśli nie spędzasz 2 godzin dziennie na czytaniu biuletynów o zabezpieczeniach, nie powinieneś sam ich wdrażać - powinieneś użyć takiego, który jest obsługiwany przez kogoś innego. –
- 1. Jak zaimplementować algorytm AO *?
- 2. Jak zaimplementować algorytm Dijkstry w Haskell
- 3. Jak zaimplementować algorytm lepszego przesuwanego okna?
- 4. Jak zaimplementować program CHCircularBuffer w projekcie iOS?
- 5. Jak zaimplementować wideo DRM w iOS
- 6. Jak zaimplementować Voice over IP w iOS?
- 7. Jak zaimplementować wielowymiarowy algorytm liniowego gradientu stochastycznego w tensorflow?
- 8. Algorytm dijkstry na iOS
- 9. Blowfish celem realizacji c
- 10. Algorytm przełączania ikon w systemie iOS
- 11. Jak zaimplementować strzałkę w dół/karetkę (jak w aplikacji Muzyka iOS 9) w projekcie iOS Swift?
- 12. Korzystanie z szyfrowania Blowfish w .NET
- 13. Blowfish długość soli dla funkcji Crypt()?
- 14. Jak zaimplementować AdMob w Phonegapie
- 15. PHP crypt() Funkcja Blowfish nie działa
- 16. Jak zaimplementować powiadomienia push dla systemu iOS 10 [Objective C]?
- 17. Podstawowe dane ios jak zaimplementować funkcję transakcji sql?
- 18. iOS - Jak zaimplementować performSelector z wieloma argumentami iz afterDelay?
- 19. Jak zaimplementować efekty zniekształceń obrazu w Androidzie
- 20. Jaki jest rozsądny algorytm generowania liter w grze Typpress iOS?
- 21. Uwierzytelnianie hasła zaszyfrowanego w PHP za pomocą Blowfish z Ruby
- 22. iOS 5: W jaki sposób zaimplementować niestandardowy przycisk powrotu (obrazu)?
- 23. Różnica w szyfrowaniu blowfish między perl i ruby
- 24. Jak zaimplementować bazę danych w aplikacji PhoneGap?
- 25. Jak zaimplementować XOR za pomocą + - * /?
- 26. Jak zaimplementować wyzwalacze w hibernacji
- 27. Jak zaimplementować odbijanie w Vue2?
- 28. Jak zaimplementować websocket w Dropwizard
- 29. Jak zaimplementować HATEOAS w Railsach
- 30. Jak zaimplementować string.rfind w Lua
http://www.example-code.com/objc/crypt2_blowfish.asp i http://code.google.com/p/blowfish-objc/feeds – iDev
dzięki ACB. Ale ta jest płatną biblioteką. Szukam darmowego kodu źródłowego –
@RatikantaPatra zrobiłeś szyfrowanie ECB w IOS? Mam problemy z tym samym numerem – QueueOverFlow