رفتن به مطلب
  • 0

اینکریپت کردن بین اندروید استودیو و بیسیک


hamed_ghorbani

سوال

سلام خسته نباشید..

از دوستان برنامه نویس اندروید استودیو کسی قطعه کدی داره که بتونم مثلا تو اندروید استودیو یه چیزیو اینکریپت کنم بعدش توی بیسیک 4 اندروید یا بیسیک 4 جاوا بتونم اونو دیکریپت کنم ؟ یا برعکس؟

لینک ارسال
به اشتراک گذاری در سایت های دیگر

4 پاسخ به این سوال تاکنون داده شده است

ارسال های توصیه شده

در 4 ساعت قبل، hamed1212 گفته است :

سلام خسته نباشید..

از دوستان برنامه نویس اندروید استودیو کسی قطعه کدی داره که بتونم مثلا تو اندروید استودیو یه چیزیو اینکریپت کنم بعدش توی بیسیک 4 اندروید یا بیسیک 4 جاوا بتونم اونو دیکریپت کنم ؟ یا برعکس؟

از کتابخونه زیر میتونید استفاده کنید کلاسهای جاواشو

 

لینک ارسال
به اشتراک گذاری در سایت های دیگر

ممنون از این استفاده کردم

 

#If java


import java.security.SecureRandom;
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;

    public static byte[] generateKey(String password) throws Exception
    {
        byte[] keyStart = password.getBytes("UTF-8");

        KeyGenerator kgen = KeyGenerator.getInstance("AES");
        SecureRandom sr = SecureRandom.getInstance("SHA1PRNG");
        sr.setSeed(keyStart);
        kgen.init(128, sr);
        SecretKey skey = kgen.generateKey();
        return skey.getEncoded();
    }

    public static byte[] encodeFile(byte[] key, byte[] fileData) throws Exception
    {

        SecretKeySpec skeySpec = new SecretKeySpec(key, "AES");
        Cipher cipher = Cipher.getInstance("AES");
        cipher.init(Cipher.ENCRYPT_MODE, skeySpec);
        byte[] encrypted = cipher.doFinal(fileData);

        return encrypted;
    }

    public static byte[] decodeFile(byte[] key, byte[] fileData) throws Exception
    {
        SecretKeySpec skeySpec = new SecretKeySpec(key, "AES");
        Cipher cipher = Cipher.getInstance("AES");
        cipher.init(Cipher.DECRYPT_MODE, skeySpec);

        byte[] decrypted = cipher.doFinal(fileData);

        return decrypted;
    }


#End If

 

 

لینک ارسال
به اشتراک گذاری در سایت های دیگر

import java.security.spec.KeySpec;
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.PBEKeySpec;
import javax.crypto.spec.SecretKeySpec;

public class encrypter {

    private static final byte[] SALT = { 12, 54, 23, 45, 23, 52, 12 };
    private static final byte[] IV = { 116, 13, 72, -50, 77, 45, -3, -72, -117, 32, 23, 19, 72, 21, 111, 22 };

    public static byte[] decrypt(String password, byte[] data) throws Exception
    {
            SecretKeyFactory factory = SecretKeyFactory.getInstance("PBEWITHSHAAND256BITAES-CBC-BC");
            KeySpec keySpec = new PBEKeySpec(password.toCharArray(), SALT, 1024, 256);
            SecretKey tmp = factory.generateSecret(keySpec);
            SecretKey secret = new SecretKeySpec(tmp.getEncoded(), "AES");
            Cipher d = Cipher.getInstance("AES/CBC/PKCS5Padding");
            d.init(2, secret, new IvParameterSpec(IV));
            return d.doFinal(data);
    }

    public static byte[] encrypt(String password, byte[] data) throws Exception
    {
        SecretKeyFactory factory = SecretKeyFactory.getInstance("PBEWITHSHAAND256BITAES-CBC-BC");
        KeySpec keySpec = new PBEKeySpec(password.toCharArray(), SALT, 1024, 256);
        SecretKey tmp = factory.generateSecret(keySpec);
        SecretKey secret = new SecretKeySpec(tmp.getEncoded(), "AES");
        Cipher e = Cipher.getInstance("AES/CBC/PKCS5Padding");
        e.init(1, secret, new IvParameterSpec(IV));
        return e.doFinal(data);
    }

}

 

سلام....

ببخشید اقای شاهپیری من این کد رو از کتابخانه های بیسیک برداشتم و تو اندروید استودیو کاملا جواب میده عین همین استفاده کردم...

ولی داخل بیسیک میخوام دوباره همینو استفاده کنم این ارور رو میده 

Caused by: java.security.NoSuchAlgorithmException: PBEWITHSHAAND256BITAES-CBC-BC SecretKeyFactory not available

درضمن این فایلو هم اضافه کردم به بیسیک 

AdditionalJar: bcprov-jdk15on-159

 

میدونید مشکل از کجاس؟ داخل خود کتابخانه مربوطه بیسیک هم که دیکامپایل داشتم چیز خاصی نداشت همه ی ایمپورت هارو هم قرار دادم ..

تعجم عینه که این کد تو اندروید استودیو خیلی عالی جواب داد ولی تو بیسیک که میزارم جواب نمیده ..

توی بیسیک هم به این صورت میزارم و با جاوا ابجکت استفادش میکنم:

 

#If java

import java.security.spec.KeySpec;
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.PBEKeySpec;
import javax.crypto.spec.SecretKeySpec;

    private static final byte[] SALT = { 12, 54, 23, 45, 23, 52, 12 };
    private static final byte[] IV = { 116, 13, 72, -50, 77, 45, -3, -72, -117, 32, 23, 19, 72, 21, 111, 22 };

    public static byte[] decrypt(String password, byte[] data) throws Exception
    {
            SecretKeyFactory factory = SecretKeyFactory.getInstance("PBEWITHSHAAND256BITAES-CBC-BC");
            KeySpec keySpec = new PBEKeySpec(password.toCharArray(), SALT, 1024, 256);
            SecretKey tmp = factory.generateSecret(keySpec);
            SecretKey secret = new SecretKeySpec(tmp.getEncoded(), "AES");
            Cipher d = Cipher.getInstance("AES/CBC/PKCS5Padding");
            d.init(2, secret, new IvParameterSpec(IV));
            return d.doFinal(data);
    }

    public static byte[] encrypt(String password, byte[] data) throws Exception
    {
        SecretKeyFactory factory = SecretKeyFactory.getInstance("PBEWITHSHAAND256BITAES-CBC-BC");
        KeySpec keySpec = new PBEKeySpec(password.toCharArray(), SALT, 1024, 256);
        SecretKey tmp = factory.generateSecret(keySpec);
        SecretKey secret = new SecretKeySpec(tmp.getEncoded(), "AES");
        Cipher e = Cipher.getInstance("AES/CBC/PKCS5Padding");
        e.init(1, secret, new IvParameterSpec(IV));
        return e.doFinal(data);
    }

#End If

 

اگه میشه یه راهنمایی کنید از صبح تالا دور اینم اوکی نشده هنوز... من اماده خور نیستم که از کتابخونه های اماده استفاده کنم میخوام یه چیزی هم یاد بگیرم اگه کمک کنین ممنون میشم 

 

لینک ارسال
به اشتراک گذاری در سایت های دیگر

آقا حل شد اون کد جاوایی که من استفاده میکردم برای b4a بود که من داشتم داخل b4j میزدم..

کد جاوای b4j برای این کار اینه که به صورت جاوا آبجکت داخل بیسیک استفاده میشه میزارم شاید بدردتون بخوره:

#If java

import org.bouncycastle.crypto.PBEParametersGenerator;
import org.bouncycastle.crypto.digests.SHA1Digest;
import org.bouncycastle.crypto.engines.AESEngine;
import org.bouncycastle.crypto.generators.PKCS12ParametersGenerator;
import org.bouncycastle.crypto.modes.CBCBlockCipher;
import org.bouncycastle.crypto.paddings.PKCS7Padding;
import org.bouncycastle.crypto.paddings.PaddedBufferedBlockCipher;
import org.bouncycastle.crypto.params.ParametersWithIV;

    private static final String KEYGEN_ALGORITHM = "PBEWITHSHAAND256BITAES-CBC-BC";
    private static final String CIPHER_ALGORITHM = "AES/CBC/PKCS5Padding";
    private static final byte[] SALT = { 12, 54, 23, 45, 23, 52, 12 };
    private static final byte[] IV = { 116, 13, 72, -50, 77, 45, -3, -72, -117, 32, 23, 19, 72, 21, 111, 22 };
	
   public static byte[] encrypt(String password,byte[] data) throws Exception
	{
	    PKCS12ParametersGenerator pGen = new PKCS12ParametersGenerator(new SHA1Digest());
	    char[] passwordChars = password.toCharArray();
	    byte[] pkcs12PasswordBytes = PBEParametersGenerator.PKCS12PasswordToBytes(passwordChars);
	    pGen.init(pkcs12PasswordBytes, SALT, 1024);
	    CBCBlockCipher aesCBC = new CBCBlockCipher(new AESEngine());
	    ParametersWithIV aesCBCParams = new ParametersWithIV(pGen.generateDerivedParameters(256), IV);
	    aesCBC.init(true, aesCBCParams);
	    PaddedBufferedBlockCipher aesCipher = new PaddedBufferedBlockCipher(aesCBC, new PKCS7Padding());
	    aesCipher.init(true, pGen.generateDerivedParameters(256));
	    byte[] plainTemp = new byte[aesCipher.getOutputSize(data.length)];
	    int offset = aesCipher.processBytes(data, 0, data.length, plainTemp, 0);
	    int last = aesCipher.doFinal(plainTemp, offset);
	    byte[] plain = new byte[offset + last];
	    System.arraycopy(plainTemp, 0, plain, 0, plain.length);
	    return plain;
    }

    public static byte[] decrypt(String password, byte[] data) throws Exception
    {
        PKCS12ParametersGenerator pGen = new PKCS12ParametersGenerator(new SHA1Digest());
        char[] passwordChars = password.toCharArray();
        byte[] pkcs12PasswordBytes =
                PBEParametersGenerator.PKCS12PasswordToBytes(passwordChars);
        pGen.init(pkcs12PasswordBytes, SALT, 1024);
        CBCBlockCipher aesCBC = new CBCBlockCipher(new AESEngine());
        ParametersWithIV aesCBCParams = new ParametersWithIV(pGen.generateDerivedParameters(256), IV);
        aesCBC.init(false, aesCBCParams);
        PaddedBufferedBlockCipher aesCipher = new PaddedBufferedBlockCipher(aesCBC,
                new PKCS7Padding());
        byte[] plainTemp = new byte[aesCipher.getOutputSize(data.length)];
        int offset = aesCipher.processBytes(data, 0, data.length, plainTemp, 0);
        int last = aesCipher.doFinal(plainTemp, offset);
        byte[] plain = new byte[offset + last];
        System.arraycopy(plainTemp, 0, plain, 0, plain.length);
        return plain;
    }

#End If

فقط برای استفاده از این کد این خط رو هم به بیسیک اضافه کنید:

#AdditionalJar: bcprov-jdk15on-159

bcprov-jdk15on-159.jar باید دانلود بشه و داخل پوشه کتابخونه ریخته بشه

لینک ارسال
به اشتراک گذاری در سایت های دیگر

بایگانی شده

این موضوع بایگانی و قفل شده و دیگر امکان ارسال پاسخ نیست.

  • کاربران آنلاین در این صفحه   0 کاربر

    • هیچ کاربر عضوی،در حال مشاهده این صفحه نیست.
×
×
  • اضافه کردن...