Le cryptage et le décryptage d'un fichier de petite taille, à l'aide d'openssl
Je veux écrire un petit programme en C/C++ qui lit un fichier texte de petite taille, et de la crypte, à l'aide d'un "interne" de la clé. Puis j'ai aussi envie d'écrire un petit programme qui permet de déchiffrer les fichiers chiffrés à l'aide de l'intérieur, la même clé.
J'ai regardé openSSL site et sur google, mais n'a pas d'exemple simple, quelqu'un a déjà essayé de faire cette chose?
- Une question par exemple similaire à stackoverflow.com/questions/3141860/...
- Vous devez utiliser
EVP_*
fonctions. LeEVP_*
des fonctions utilisation de matériel, comme les AES-NI (si disponible). Voir EVP Symétrique de Chiffrement et de Déchiffrement sur la OpenSSL wiki. En fait, vous devriez probablement être authentifié à l'aide de chiffrement, car il fournit à la fois la confidentialité et l'authenticité. Voir EVP Authentifié de Chiffrement et de Déchiffrement sur la OpenSSL wiki.
Vous devez vous connecter pour publier un commentaire.
Idéalement, vous pouvez utiliser un outil comme
ccrypt
, mais va ici:Le déchiffrement se fait par l'appel de
AES_cfb128_encrypt
avecAES_DECRYPT
comme le dernier paramètre. Notez que ce code n'a pas été donné quelque chose de plus que la plus élémentaire de test, et que vous devriez vraiment utiliser de façon appropriée les 8 bits de données aléatoires pour ckey et ivec.MODIFIER: Il semble
AES_cfb128_encrypt
accepte les données de longueur arbitraire, de sorte que vous n'avez pas à chiffrer dans les blocs deAES_BLOCK_SIZE
(16) octets.FILE *ifp = fopen("input_file", "rb"); FILE *ofp = fopen("output_file", "wb");
Réponses précédentes ont souligné vous à l'égard de la façon de faire ce que vous avez demandé.
Je voudrais ajouter un mot sur les raisons de vous ne devriez probablement pas faire ce.
De ce dont vous parlez s'appelle "chiffrement symétrique" (la même clé est utilisée pour le cryptage et le décryptage, par opposition à un chiffrement asymétrique où tout chiffré avec une clé ne peut être déchiffré par un équivalent).
Démontage d'un exécutable pour déterminer une clé codée en dur utilisé est le suivant-à-trivial. Cela signifie que toute personne qui obtient ses mains sur l'un de vos exécutables, jamais, peut casser le chiffrement des messages déjà échangés.
Sauf si l'application que vous avez en tête est très spécifique, cela signifie que votre installation peut "regarder" sécurisé, mais ne l'est pas. Dans ces cas, il est généralement préférable de ne pas chiffrer à tous, afin que personne impliquée tombe pour que le faux sentiment de sécurité...
C'est très bien que vous êtes à la recherche pour les bibliothèques standards de faire le cryptage (au lieu de la mise en place, la création d'un algorithme de vous-même), mais le protocoll / (comment applications, les clés et les messages sont utilisées et échangées) est au moins aussi important que le chiffre lui-même. Vous pourriez avoir vos idées testé par quelqu'un qui traite dans la cryptographie, pour vous dire les faiblesses. (Je suis sûr qu'il ya assez de ce genre ici, à StackOverflow. 😉 )
OpenSSL est précisément à l'implémentation de SSL et TLS qui sont des protocoles de chiffrement de données sur un réseau. Puisque vous êtes simplement à la recherche pour crypter un fichier, il est possible d'utiliser OpenSSL, mais pas idéal.
Au lieu de cela, je voudrais utiliser quelque chose comme BeeCrypt ou Crypto++® Bibliothèque 5.6.0 qui fournissent des exemples de leur utilisation.
BIO
's, qui sont une abstraction. La bibliothèque est très bien avec de la mémoire tampon, tampons de fichiers, sockets, et d'autres I/O objets. La cryptographie partie de la bibliothèque (libcrypto.a
) peut être utilisé de façon autonome; et la partie SSL (libssl.a
) est construit sur le haut de la cryptographie.