Küçük bir metin dosyası okuyan ve bir "dahili" anahtar kullanarak şifreleyen C/C++ 'da küçük bir program yazmak istiyorum. Daha sonra aynı şifreyi kullanarak şifrelenmiş dosyanın şifresini çözebilen başka bir küçük program yazmak istiyorum. Küçük bir dosyanın şifrelenmesi ve şifresini çözme openssl
Ben openSSL sitesinde baktım google'dan ancak basit bir örnek buldum, birileri hiç de bu işi yapmaya çalıştı?cevap
OpenSSL bir ağ üzerinden veri şifrelemek için protokoller SSL ve TLS uygulanması ile spesifik olarak ilgilidir. Bir dosyayı şifrelemek istediğinizden, OpenSSL kullanmak ancak ideal değil. Bunun yerine, her ikisi de kullanımları için örnekler veren BeeCrypt veya Crypto++® Library 5.6.0 gibi bir şey kullanırdım.
OpenSSL, bir soyutlama olan hem BIO'ların hem belleğine hem de dosyasına sahiptir. Kütüphane, bellek arabellekleri, dosya arabellekleri, soketler ve diğer G/Ç nesneleriyle uyumludur. Kütüphanenin kriptografi kısmı ('libcrypto.a') tek başına kullanılabilir; ve SSL bölümü ('libssl.a') kriptografinin üstüne kurulmuştur. – jww
İdeali, ccrypt
gibi mevcut bir aracı kullanmak olabilir, ama buraya:
#include <openssl/aes.h>
/* ... */
{
int bytes_read, bytes_written;
unsigned char indata[AES_BLOCK_SIZE];
unsigned char outdata[AES_BLOCK_SIZE];
/* ckey and ivec are the two 128-bits keys necesary to
en- and recrypt your data. Note that ckey can be
192 or 256 bits as well */
unsigned char ckey[] = "thiskeyisverybad";
unsigned char ivec[] = "dontusethisinput";
/* data structure that contains the key itself */
AES_KEY key;
/* set the encryption key */
AES_set_encrypt_key(ckey, 128, &key);
/* set where on the 128 bit encrypted block to begin encryption*/
int num = 0;
while (1) {
bytes_read = fread(indata, 1, AES_BLOCK_SIZE, ifp);
AES_cfb128_encrypt(indata, outdata, bytes_read, &key, ivec, &num,
AES_ENCRYPT);
bytes_written = fwrite(outdata, 1, bytes_read, ofp);
if (bytes_read < AES_BLOCK_SIZE)
break;
}
}
Şifre çözme son parametre olarak AES_DECRYPT
ile AES_cfb128_encrypt
arayarak yapılır. Bu kodun testin en temelinden daha fazla bir şey verilmediğini ve ckey ve ivec için uygun 8 bitlik rastgele verileri kullanmanız gerektiğini unutmayın.
DÜZENLEME: AES_cfb128_encrypt
istenilen uzunlukta veriyi kabul eder görünüyor, bu nedenle AES_BLOCK_SIZE
(16) bayt bloklar halinde şifrelemek için gerekli değiliz.
aes'den bazı yönlerden yardım doktoru şunları söylüyor: Bu kitaplığın tüm olası büyüklükleri ve çalışma modları sağlanamıyor. Bu nedenle, ve diğerleri, uygulamalar doğrudan AES işlevlerini çağırmak yerine, L
@Michiel Budding ': Kodunuzu kullandım ve int num değerini başlatmalıyım; doğru çalışması için ivec boyutuna. – Macarse
Kod parçanız çok büyük. – user99545
Önceki cevaplar, istediklerinizi nasıl yapacağınız konusunda yönlendirdi.
Neden numaralı telefona bir kelime eklemek istiyorum muhtemelen.
Bahsettiğiniz şey, "simetrik şifreleme" olarak adlandırılır (aynı anahtar şifrelemek ve şifresini çözmek için kullanılır; asimetrik şifrelemenin aksine, tek bir anahtarla şifrelenen her şey yalnızca belirli bir karşılık olarak çözülebilir). kullanılan kodlanmış anahtar belirlemek için bir çalıştırılabilir sökülmesi
sonraki ve basittir. Bu demektir ki, ellerini her zaman sizin yürütücülerinizden birine götüren herkes, daha önce değiştirilen herhangi bir mesajın şifrelenmesini kırabilir. aklınızdaki uygulandığında çok özel olmadığı sürece
, bu kurulum "look" güvenli olabilir anlamına gelir, ama değil. Bu durumlarda, genellikle şifrelenmemesi daha iyidir, bu yüzden hiç kimsenin bu sahte güvenlik duygusu için düşmemesi gerekir ...
Şifreleme yapmak için standart kütüphanelere bakmak çok iyidir (uygulamak yerine)/bir algoritma da) oluşturmak, ama Protokollerine uygulamaları, anahtarlar ve mesajlar kullanılır ve değiş tokuş edilmektedir nasıl (), en azından şifre kendisi kadar önemlidir. Fikirlerinizi kriptografiyle uğraşan biri tarafından test edilmek, zayıflıklarını anlatmak isteyebilirsiniz. (O tür yeterli StackOverflow'daki burada olduğuna eminim. ;-))
+1. Ancak, söylediğin gibi, en az iki cevap simetrik şifreleme yapmamayı önerdi (Andrew Austin ve benimki). – bortzmeyer
İtiraf ediyorum Ne hakkında olduğunu öğrenmek için bağlantıları takip etmedim. ;-) – DevSolar
Biraz muhalif olmak zorundayım (ve tabi ki); OP'nin ne düşündüğü hakkında hiçbir fikrimiz yok. Şifreleme ve şifre çözme farklı bilgisayarlarda yapılırsa, bir iç anahtar güvenlidir. Sadece SSL kütüphaneleriyle oynamak istiyorsa, güvenlik önemsizdir. Tavsiye için size +1 vereceğim, ama "bunu yapmamalısınız" biraz özet bir özet. –
- 1. Yapılandırma dosyasında saklanan şifrenin şifrelenmesi/şifresini çözme
- 2. jabber isteklerinin şifresini çözme
- 3. Bir görüntü dosyasının şifrelenmesi için Basit Şifreleme/Şifre Çözme yöntemi
- 4. MediaPlayer'a anında ses/video şifresini çözme
- 5. Fiddler - iPad uygulamasından HTTPS trafiğini yakalama ve şifresini çözme
- 6. başlatılmamış sabit OpenSSL (NameError)
- 7. Bir dosyanın şifresini çözmek için ssh-public anahtarımı kullanabilir miyim?
- 8. Bir kullanıcı şifresini meşgul kutusu ve openssl ile bir komut dosyasında nasıl değiştirirsiniz?
- 9. OpenSSL ve
- 10. Şifrenin şifrelenmesi
- 11. Olay Görüntüleyicisi Uygulama Kilitlenme - hata mesajının şifresini çözme
- 12. RSA şifrelemek/şifresini çözmek
- 13. Seçili Metnin Şifrelenmesi Gerekiyor
- 14. iPhone çalıştırılabilir (MACH-O) şifre çözme
- 15. X509Bakım şifreleme/şifre çözme
- 16. “.automaticDestinations-ms” ve/veya “.customDestinations-ms” öğesinin şifresini çözme/okuma/değiştirme
- 17. OpenSSL: giriş ve çıkış tamponları, şifrelerin/şifrelerini çözme rutinleri için aynı olabilir mi?
- 18. php'de her bir sabun isteğinin şifrelenmesi nasıl yapılır?
- 19. ses dosyası şifrelemek ve şifresini çözmek android
- 20. Android lolipop şifrelenmiş dosya şifresini çözemez
- 21. bir dosyanın
- 22. Bir dizgiyi kodlama ve kod çözme
- 23. Bir dosyanın
- 24. OpenSSL ruby
- 25. .. RSA anahtarları üretebilir ve şifreleyebilir/şifresini çözebilir?
- 26. Bazı basit dosya şifreleme ve şifre çözme işlemleri nasıl yapılır?
- 27. MJPEG akışı ve kod çözme
- 28. Unicode ve `kod çözme() 'Python
- 29. Retrofit ve OkHttp gzip kod çözme
- 30. CryptoJS'yi kullanarak şifresini çözemez (Java, Python'da çalışır)
benzer örnekle bir soru http://stackoverflow.com/questions/3141860/aes-ctr-256-encryption-mode-of- open-on-openssl – enthusiasticgeek
'EVP_ *' işlevlerini kullanmalısınız. 'EVP_ *' işlevleri, AES-NI (varsa) gibi donanım kullanır. OpenSSL wiki'de [EVP Simetrik Şifreleme ve Şifre Çözme] (https://wiki.openssl.org/index.php/EVP_Symmetric_Encryption_and_Decryption) konusuna bakın.Aslında, her ikisi de * gizlilik ve özgünlük sağladığından, kimliği doğrulanmış şifrelemeyi kullanmalısınız. OpenSSL wiki'deki [EVP Onaylı Şifreleme ve Şifre Çözme] (https://wiki.openssl.org/index.php/EVP_Authenticated_Encryption_and_Decryption) konusuna bakın. – jww