में .net और डिक्रिप्ट में फ़ाइल को एन्क्रिप्ट कैसे करें मैं प्रोजेक्ट पर काम कर रहा हूं जहां हमें एंड्रॉइड एसडी कार्ड में सुरक्षित रूप से पीडीएफ रखना है। हम चाहते हैं कि यह .NET में एन्क्रिप्ट किया जाए क्योंकि इसे एपीआई के माध्यम से स्थानांतरित किया जाना है। मैंने .NET में कार्यान्वित किया है लेकिन एंड्रॉइड में डिक्रिप्ट करने में असमर्थ है।एंड्रॉइड
कोड फ़ाइल को डिक्रिप्ट करने
public static void EncryptFile(string inputFile, string outputFile)
{
try
{
string password = @"myKey123"; // Your Key Here
UnicodeEncoding UE = new UnicodeEncoding();
byte[] key = UE.GetBytes(password);
string cryptFile = outputFile;
FileStream fsCrypt = new FileStream(cryptFile, FileMode.Create);
RijndaelManaged RMCrypto = new RijndaelManaged();
RMCrypto.Mode = CipherMode.CBC; //remember this parameter
RMCrypto.Padding = PaddingMode.PKCS7; //remember this parameter
RMCrypto.KeySize = 0x80;
RMCrypto.BlockSize = 0x80;
CryptoStream cs = new CryptoStream(fsCrypt,
RMCrypto.CreateEncryptor(key, key),
CryptoStreamMode.Write);
FileStream fsIn = new FileStream(inputFile, FileMode.Open);
int data;
while ((data = fsIn.ReadByte()) != -1)
{
cs.WriteByte((byte)data);
}
fsIn.Close();
cs.Close();
fsCrypt.Close();
}
catch
{
Console.WriteLine("Encryption failed!", "Error");
}
}
कोड एक फ़ाइल एन्क्रिप्ट करने के लिए
public static void DecryptFile(string inputFile, string outputFile)
{
{
string password = @"myKey123"; // Your Key Here
UnicodeEncoding UE = new UnicodeEncoding();
byte[] key = UE.GetBytes(password);
FileStream fsCrypt = new FileStream(inputFile, FileMode.Open);
RijndaelManaged RMCrypto = new RijndaelManaged();
RMCrypto.Mode = CipherMode.CBC; //remember this parameter
RMCrypto.Padding = PaddingMode.PKCS7; //remember this parameter
RMCrypto.KeySize = 0x80;
RMCrypto.BlockSize = 0x80;
CryptoStream cs = new CryptoStream(fsCrypt,
RMCrypto.CreateDecryptor(key, key),
CryptoStreamMode.Read);
FileStream fsOut = new FileStream(outputFile, FileMode.Create);
int data;
while ((data = cs.ReadByte()) != -1)
fsOut.WriteByte((byte)data);
fsOut.Close();
cs.Close();
fsCrypt.Close();
}
}
मैं कोड
public static byte[] decodeFile(String key, byte[] fileData) throws Exception
{
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); //this parameters should not be changed
byte[] keyBytes = new byte[16];
byte[] b = key.getBytes("UTF-16");
System.out.println("RAM"+b);
int len = b.length;
if (len > keyBytes.length)
len = keyBytes.length;
System.arraycopy(b, 0, keyBytes, 0, len);
SecretKeySpec keySpec = new SecretKeySpec(keyBytes, "AES");
IvParameterSpec ivSpec = new IvParameterSpec(keyBytes);
cipher.init(Cipher.DECRYPT_MODE, keySpec, ivSpec);
byte[] decrypted = cipher.doFinal(fileData);
return decrypted;
}
नीचे का उपयोग कर इस कोड चलाने जब मैं त्रुटि मिलती है एंड्रॉयड में करने की कोशिश की:
error:06065064:digital envelope routines:EVP_DecryptFinal_ex:bad decrypt
दो चीजें जो बाहर निकलती हैं: 1) मनमाने ढंग से कुंजी सरणी को छोटा नहीं करना चाहिए; 2) पीकेसीएस 7 एंड्रॉइड कोड में .NET कोड, और पीकेसीएस 5 में पैडिंग योजना का उपयोग किया जा रहा है। – dbugger
मैंने पैडिंग भी देखी। पीकेसीएस 5 पीकेसीएस 7 का सबसेट है इसलिए कोई गारंटी नहीं है कि आपका डिक्रिप्शन कोड इसे समझने में सक्षम होगा (वास्तव में कुछ समय काम कर सकता है लेकिन इसे एक झलक माना जा सकता है)। –
इस समस्या को हल करने के लिए क्या किया जा सकता है। कोई भी कोड या लाइब्रेरी जो – user3036123