Quelle est la meilleure façon de mettre en œuvre BlowFish ECB cryptage en iOS ??? J'ai été googling beaucoup et trouvé la bibliothèque here. Mais il n'y a pas de documentation de cette bibliothèque. Je ne sais pas comment l'utiliser.Comment implémenter l'algorithme Blowfish dans iOS
Répondre
J'ai reçu l'implémentation de Paul Kocher de Bruce Schneier's website. Et voici comment une méthode de cryptage peut ressembler à:
#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];
}
Je ne suis pas très bon en C, mais il semble que ma mise en œuvre fonctionne correctement. Pour déchiffrer vous devez simplement répéter les mêmes étapes, mais au lieu de Blowfish_Encrypt vous devez appeler Blowfish_Decrypt.
Voici un code source pour que (je suppose que vous décryptez tout le texte chiffré, mais ne traitent pas avec un rembourrage ici):
+ (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;
}
Vous voudrez peut-être revenir octets purs ou chaîne base64. Pour le dernier cas j'ai une catégorie, qui ajoute un initialisateur, qui initialise l'objet NSData avec la chaîne Base64 et une méthode, qui permet d'obtenir la chaîne Base64 de NSData.
Vous devriez également penser à jouer avec PADDING_PHRASE, par exemple, que se passe-t-il si vous voulez ajouter non seulement plusieurs espaces, mais quelques octets aléatoires? Dans ce cas, vous devriez envoyer une longueur de remplissage en quelque sorte.
Mise à jour: En fait, vous ne devriez pas utilisation PADDING_PRASE dans votre processus. Au lieu de cela, vous devez utiliser l'un des algorithmes standard pour les chiffrements de bloc décrits sur Wikipedia page
Notez sur votre code: Vous devriez seulement ajouter emptyData si [dataToEncrypt length]% 8! = 0. – ggfela
C'est génial, je ne peux pas vraiment travailler autrement pour le décryptage, avez-vous un exemple de code? – perrohunter
@ggfela bien sûr, merci. En fait, j'ai suivi un cours de cryptographie sur Coursera et il y avait des règles strictes sur le rembourrage. Vous pouvez lire à propos de ceux dans [article Wikipedia] (http://en.wikipedia.org/wiki/Padding_ (cryptographie) #Block_cipher_mode_of_operation) et mettre en œuvre tout. – Stas
L'API CommonCrypto d'Apple fournit (entre autres) une implémentation de Blowfish. Vous pouvez crypter et décrypter dans les modes CBC (par défaut) ou ECB.
Voir CommonCrypto.h, CommonCryptor.h et la page de manuel CommonCrypto pour la documentation.
J'ai écrit une implémentation native pour l'algorithme Blowfish car il n'y avait pas de mise en œuvre pour répondre à mes besoins il y a quelque temps
Peut-être que c'est une vieille question, mais je veux aider quelqu'un qui a besoin d'une classe native pour l'algorithme Blowfish .
Son fonctionne entièrement compatible avec PHP
Un Objective-C Blowfish mise en œuvre
- Supporte le mode EBC et CBC
- Prise en charge RFC rembourrage et le rembourrage zéro
- Works compatible avec Mcrypt PHP
- Initialement codé pour iOS SDK.Il peut aussi travailler pour OS X SDK
Plus sur GitHub;
Quels sont les avantages de ce sur l'utilisation de celui fourni par Apple, qui a été approuvé/etc par les experts de la sécurité et sera corrigé rapidement s'il y a des vulnérabilités? –
Quand j'ai écrit ceci. Je n'ai pas trouvé de bibliothèque blowfish compatible avec php pour iOS. Peu de temps il n'y avait pas d'alternatives. C'est le cas principal. Je ne savais pas à propos du wrapper blowfish de la pomme. Tout d'abord, il est facile à utiliser et facile à comprendre derrière la scène. S'il s'agit de soutenir l'algorithme avec des correctifs aux vulnérabilités, je choisirais sûrement l'Apple. D'un autre côté, je ne pense pas que l'algorithme puisse causer des vulnérabilités. Pensez-y comme juste une petite alternative: P Une dernière chose pourriez-vous me fournir les méthodes blowfish d'Apple pour iOS SDK? –
il pourrait y avoir des bogues dans l'algorithme. Cela arrive tout le temps. À moins que vous ne passiez 2 heures par jour à lire des bulletins de sécurité, vous ne devriez pas en implémenter un vous-même - vous devriez en utiliser un qui est maintenu par quelqu'un d'autre. –
- 1. Comment implémenter l'algorithme Blowfish dans J2ME?
- 2. ios comment implémenter SocketIO dans iOS
- 3. Autorisations dans iOS comment implémenter
- 4. Comment implémenter IndexDB dans IOS
- 5. Algorithme Blowfish dans l'application iphone
- 6. Cryptage Blowfish dans android
- 7. Comment implémenter webRTC dans l'application iOS
- 8. comment implémenter seecarc (Semicircular seekbar) dans ios?
- 9. Comment implémenter la requête DNS dans iOS
- 10. Comment implémenter la barre d'erreur dans iOS?
- 11. comment implémenter l'outil lasso magnétique dans IOS
- 12. Comment puis-je implémenter "snooze" dans iOS?
- 13. Comment implémenter Floating Action Button dans iOS?
- 14. Comment implémenter la DRM vidéo dans iOS
- 15. Comment implémenter AutoCanel iCarousel dans iOS?
- 16. Comment implémenter CHCircularBuffer dans un projet iOS?
- 17. Comment implémenter AFNetwoking interagtion dans iOS?
- 18. C# Comment utiliser blowfish dans silverlight?
- 19. Comment implémenter tow storyBoards? ios
- 20. cryptage blowfish dans actionscript 3
- 21. Blowfish Crypte confusion
- 22. Quelle est la différence entre Blowfish et Blowfish-compat?
- 23. Fichier Blowfish PHP manquant?
- 24. BlowFish decrypt - Mode nCFB
- 25. Blowfish php en C?
- 26. blowfish algorithme objectif c
- 27. Comment implémenter le contrôle Pivot pour iOS?
- 28. BouncyCastle BlowFish question Crypto
- 29. Comment implémenter iOS Google Maps SDK
- 30. Comment implémenter iOS loing Twitter avec Parse?
http://www.example-code.com/objc/crypt2_blowfish.asp et http://code.google.com/p/blowfish-objc/feeds – iDev
grâce ACB. Mais celui-ci est une bibliothèque payante. Je suis à la recherche d'un code source libre –
@RatikantaPatra vous avez fait le chiffrement de la BCE dans IOS? Je suis aux prises avec le même problème – QueueOverFlow