Alguém pode me apontar na direção certa para poder criptografar uma string, retornando outra string com os dados criptografados? (Eu tenho tentado com a criptografia AES256.) Quero escrever um método que use duas instâncias NSString, uma sendo a mensagem para criptografar e a outra sendo um 'código de acesso' para criptografá-la - desconfio que teria que gerar a chave de criptografia com a senha, de uma maneira que pode ser revertida se a senha for fornecida com os dados criptografados. O método deve retornar um NSString criado a partir dos dados criptografados.
Eu tentei a técnica detalhada no primeiro comentário deste post , mas não tive sorte até agora. O CryptoExercise da Apple certamente tem algo, mas eu não consigo entender ... Eu já vi muitas referências ao CCCrypt , mas falhou em todos os casos em que o usei.
Eu também teria que ser capaz de descriptografar uma string criptografada, mas espero que seja tão simples quanto o kCCEncrypt / kCCDecrypt.
Respostas:
Como você não publicou nenhum código, é difícil saber exatamente quais problemas você está enfrentando. No entanto, a postagem do blog ao qual você vincula parece funcionar com bastante decência ... além da vírgula extra em cada chamada na
CCCrypt()
qual causou erros de compilação.Um comentário posterior sobre esse post inclui esse código adaptado , que funciona para mim e parece um pouco mais direto. Se você incluir o código para a categoria NSData, poderá escrever algo assim: (Nota: as
printf()
chamadas são apenas para demonstrar o estado dos dados em vários pontos - em um aplicativo real, não faria sentido imprimir esses valores .)Dado esse código, e o fato de os dados criptografados nem sempre serem traduzidos de maneira agradável em um NSString, pode ser mais conveniente escrever dois métodos que envolvam a funcionalidade de que você precisa, tanto para frente quanto para trás ...
Isso definitivamente funciona no Snow Leopard, e a @Boz relata que o CommonCrypto faz parte do Core OS no iPhone. Tanto o 10.4 quanto o 10.5 possuem
/usr/include/CommonCrypto
, embora 10.5 tenha uma página de manualCCCryptor.3cc
e 10.4 não, portanto o YMMV.EDIT: Consulte esta pergunta de acompanhamento sobre o uso da codificação Base64 para representar bytes de dados criptografados como uma sequência (se desejar) usando conversões seguras e sem perdas.
fonte
autorelease
.Reuni uma coleção de categorias para o NSData e o NSString, que utiliza soluções encontradas no blog de Jeff LaMarche e algumas dicas de Quinn Taylor aqui no Stack Overflow.
Ele usa categorias para estender o NSData para fornecer criptografia AES256 e também oferece uma extensão de NSString para dados criptografados com codificação BASE64 com segurança para seqüências de caracteres.
Aqui está um exemplo para mostrar o uso para criptografar seqüências de caracteres:
Obtenha o código fonte completo aqui:
Obrigado por todas as dicas úteis!
-- Michael
fonte
@owlstead, sobre sua solicitação de "uma variante criptograficamente segura de uma das respostas fornecidas", consulte RNCryptor . Ele foi projetado para fazer exatamente o que você está solicitando (e foi construído em resposta aos problemas com o código listado aqui).
O RNCryptor usa PBKDF2 com sal, fornece um IV aleatório e anexa HMAC (também gerado a partir de PBKDF2 com seu próprio sal. Ele suporta operação síncrona e assíncrona.
fonte
Eu esperei um pouco no @QuinnTaylor para atualizar sua resposta, mas como ele não o fez, aqui está a resposta um pouco mais clara e de uma maneira que será carregada no XCode7 (e talvez maior). Usei isso em um aplicativo Cocoa, mas provavelmente funcionará bem com um aplicativo iOS também. Não possui erros de ARC.
Cole antes de qualquer seção @implementation no seu arquivo AppDelegate.m ou AppDelegate.mm.
Cole essas duas funções na classe @implementation desejada. No meu caso, escolhi @implementation AppDelegate no meu arquivo AppDelegate.mm ou AppDelegate.m.
fonte
dataWithBytesNoCopy
apenas aloque umNSMutableData
comdataWithLength
e use amutableBytes
propriedade para o ponteiro de bytes e, em seguida, redimensione definindo sualength
propriedade. 3. O uso direto de strings para uma criptografia é muito inseguro, uma chave derivada deve ser usada como a criada pelo PBKDF2.keyData.length = kCCKeySizeAES256;
.https://github.com/muneebahmad/AESiOSObjC
fonte