جواد زبیدی زاده 53 ارسال شده در ۹ خرداد ۱۳۹۶ گزارش اشتراک گذاری ارسال شده در ۹ خرداد ۱۳۹۶ با سلام در این تاپیک با نحویه کد و دیکد کردن اطلاعات بین اندروید وسرور آشنا میشوید و میتوانید اطلاعات رو به صورت امن بین کلاینت و سرور رد و بدل کنید. اول این کلاس php را به سرور اضافه کنید <?php class MCrypt { private $iv = 'fedcba9876543210'; #Same as in JAVA private $key = '0123456789abcdef'; #Same as in JAVA function __construct() { } function encrypt($str) { //$key = $this->hex2bin($key); $iv = $this->iv; $td = mcrypt_module_open('rijndael-128', '', 'cbc', $iv); mcrypt_generic_init($td, $this->key, $iv); $encrypted = mcrypt_generic($td, $str); mcrypt_generic_deinit($td); mcrypt_module_close($td); return bin2hex($encrypted); } function decrypt($code) { //$key = $this->hex2bin($key); $code = $this->hex2bin($code); $iv = $this->iv; $td = mcrypt_module_open('rijndael-128', '', 'cbc', $iv); mcrypt_generic_init($td, $this->key, $iv); $decrypted = mdecrypt_generic($td, $code); mcrypt_generic_deinit($td); mcrypt_module_close($td); return utf8_encode(trim($decrypted)); } protected function hex2bin($hexdata) { $bindata = ''; for ($i = 0; $i < strlen($hexdata); $i += 2) { $bindata .= chr(hexdec(substr($hexdata, $i, 2))); } return $bindata; } } و بعد از اون این کلاس جاوا رو به پروژه خودتون اضافه کنید import java.security.NoSuchAlgorithmException; import javax.crypto.Cipher; import javax.crypto.NoSuchPaddingException; import javax.crypto.spec.IvParameterSpec; import javax.crypto.spec.SecretKeySpec; public class MCrypt { private String iv = "fedcba9876543210";//Dummy iv (CHANGE IT!) private IvParameterSpec ivspec; private SecretKeySpec keyspec; private Cipher cipher; private String SecretKey = "0123456789abcdef";//Dummy secretKey (CHANGE IT!) public MCrypt() { ivspec = new IvParameterSpec(iv.getBytes()); keyspec = new SecretKeySpec(SecretKey.getBytes(), "AES"); try { cipher = Cipher.getInstance("AES/CBC/NoPadding"); } catch (NoSuchAlgorithmException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (NoSuchPaddingException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public byte[] encrypt(String text) throws Exception { if(text == null || text.length() == 0) throw new Exception("Empty string"); byte[] encrypted = null; try { cipher.init(Cipher.ENCRYPT_MODE, keyspec, ivspec); encrypted = cipher.doFinal(padString(text).getBytes()); } catch (Exception e) { throw new Exception("[encrypt] " + e.getMessage()); } return encrypted; } public byte[] decrypt(String code) throws Exception { if(code == null || code.length() == 0) throw new Exception("Empty string"); byte[] decrypted = null; try { cipher.init(Cipher.DECRYPT_MODE, keyspec, ivspec); decrypted = cipher.doFinal(hexToBytes(code)); } catch (Exception e) { throw new Exception("[decrypt] " + e.getMessage()); } return decrypted; } public static String bytesToHex(byte[] data) { if (data==null) { return null; } int len = data.length; String str = ""; for (int i=0; i<len; i++) { if ((data[i]&0xFF)<16) str = str + "0" + java.lang.Integer.toHexString(data[i]&0xFF); else str = str + java.lang.Integer.toHexString(data[i]&0xFF); } return str; } public static byte[] hexToBytes(String str) { if (str==null) { return null; } else if (str.length() < 2) { return null; } else { int len = str.length() / 2; byte[] buffer = new byte[len]; for (int i=0; i<len; i++) { buffer[i] = (byte) Integer.parseInt(str.substring(i*2,i*2+2),16); } return buffer; } } private static String padString(String source) { char paddingChar = ' '; int size = 16; int x = source.length() % size; int padLength = size - x; for (int i = 0; i < padLength; i++) { source += paddingChar; } return source; } } حا الا که کلاس های بالا رو به پروژه و سرور اضافه کردید نوبت میرسه به رد بدل کردن اطلاعات میشه برای وارد کردن کلاس php به فایل های php از include استفاده کنید به این صورت توجه کنید که لاس در کنار فایل ها باید باشه و گر نه باید مسیر کامل رو هم بدید include('myclass.php'); توی دو کلاس دو متغییر وجود دارند که باید در هر دو کلاس متغییر (دو متغییر در جاوا و دوتا در سمت سرور ) شبیه به هم باشند و گر نه شناسای مقادیر کد شده مشکل و عملا دیکد نمیشوند این متغییر ها قدرت کد شدن داده رو افزایش می دهند متغییر ها در جاوا private String iv = "fedcba9876543210";//Dummy iv (CHANGE IT!) private String SecretKey = "0123456789abcdef";//Dummy secretKey (CHANGE IT!) متغییر ها در سمت php private $iv = 'fedcba9876543210'; #Same as in JAVA private $key = '0123456789abcdef'; #Same as in JAVA خب کد و دیکد کردن مقدار در جاوا رو به این صورت تعریف میکنیم اول میای یک شیئ از کلاس ایجاد میکنیم mcrypt = new MCrypt(); اول کد اطلاعات رو کد میکنیم بعد مقادیر رو به صورت bytesToHex در یک متغییر قرار میدیم و بعد به وسیله encrypt مقدار رو کد میکنیم (این مقدار کد شده هستش) String encrypted = MCrypt.bytesToHex( mcrypt.encrypt("Text to Encrypt") ); برای دیکد کردن کافیه متغیر رو به درون تابع decrypt قرار بدیم String decrypted = new String( mcrypt.decrypt( encrypted ) ); کا ما در سمت اندروید تموم شد و مقدار کد و دیکد کردیم کد های تکمیلی جاوا mcrypt = new MCrypt(); /* Encrypt */ String encrypted = MCrypt.bytesToHex( mcrypt.encrypt("Text to Encrypt") ); /* Decrypt */ String decrypted = new String( mcrypt.decrypt( encrypted ) ); خب حالا سمت php باز میایم یک شیئ ایجاد میکنیم $mcrypt = new MCrypt(); ابتدا میایم مقدار رو کد میکنیم $encrypted = $mcrypt->encrypt("Text to encrypt"); سپس همون مقدار رو نیز دیکد میکنیم $decrypted = $mcrypt->decrypt($encrypted); کد های تکمیلی php $mcrypt = new MCrypt(); #Encrypt $encrypted = $mcrypt->encrypt("Text to encrypt"); #Decrypt $decrypted = $mcrypt->decrypt($encrypted); امید وارم آموزش مفیدی برای شما باشه من الله التوفیق 5 نقل قول لینک ارسال به اشتراک گذاری در سایت های دیگر
MR _ RGF 3 ارسال شده در ۱۷ تیر ۱۳۹۶ گزارش اشتراک گذاری ارسال شده در ۱۷ تیر ۱۳۹۶ میشه مقدار دو متغییر iv و SecretKey رو تغییر داد ؟؟؟ نقل قول لینک ارسال به اشتراک گذاری در سایت های دیگر
جواد زبیدی زاده 53 ارسال شده در ۱۷ تیر ۱۳۹۶ مالک گزارش اشتراک گذاری ارسال شده در ۱۷ تیر ۱۳۹۶ در 7 ساعت قبل، MR _ RGF گفته است : میشه مقدار دو متغییر iv و SecretKey رو تغییر داد ؟؟؟ بله میشه ولی باید در هر دو طرف یکی باشند یعنی سمت php و سمت جاوا نقل قول لینک ارسال به اشتراک گذاری در سایت های دیگر
MR _ RGF 3 ارسال شده در ۲۵ مهر ۱۳۹۶ گزارش اشتراک گذاری ارسال شده در ۲۵ مهر ۱۳۹۶ ببخشید این کد حروف فارسی رو کد و دیکد نمیکنه ؟؟؟؟؟؟؟؟؟؟؟؟؟ نقل قول لینک ارسال به اشتراک گذاری در سایت های دیگر
hamidreza.kh 5 ارسال شده در ۲۵ مهر ۱۳۹۶ گزارش اشتراک گذاری ارسال شده در ۲۵ مهر ۱۳۹۶ سلام من اطلاعات رو با استفاده از volley و همینطور json میفرستم سمت پی اچ پی یا میگیرم میخوام اطلاعات مثلا یوزر ها مثلا پسوردشون(یوزرنیم هم هست ولی خب اون نیاز به هش کردن نداره) بصورت هش توی دیتابیس سرور php م ذخیره بشه ، باید چیکار کنم؟ نقل قول لینک ارسال به اشتراک گذاری در سایت های دیگر
mehrdadmmb2 35 ارسال شده در ۲۵ مهر ۱۳۹۶ گزارش اشتراک گذاری ارسال شده در ۲۵ مهر ۱۳۹۶ اگر میخواید با php این کار رو بکنید که میشه از ()md5 استفاده کرد که البته به هیچ عنوان امن نیست مگر اینکه خودتون چندتا کاراکتر قبل و بعدش اضافه کنید 1 نقل قول لینک ارسال به اشتراک گذاری در سایت های دیگر
جواد زبیدی زاده 53 ارسال شده در ۲۵ مهر ۱۳۹۶ مالک گزارش اشتراک گذاری ارسال شده در ۲۵ مهر ۱۳۹۶ برای hash کردن پسورد از تابع زیر استفاده کنید password_hash("123456", PASSWORD_DEFAULT); برای برسی صحیح بودن پسورد هم از تابع زیر $hash = '$1$toHVx1uW$KIvW9yGZZSU/1YOidHeqJ/'; if (password_verify('123456', $hash)) { echo 'Password is valid!'; } else { echo 'Invalid password.'; } 1 نقل قول لینک ارسال به اشتراک گذاری در سایت های دیگر
hamidreza.kh 5 ارسال شده در ۲۵ مهر ۱۳۹۶ گزارش اشتراک گذاری ارسال شده در ۲۵ مهر ۱۳۹۶ در 5 ساعت قبل، Seven7up گفته است : برای hash کردن پسورد از تابع زیر استفاده کنید password_hash("123456", PASSWORD_DEFAULT); برای برسی صحیح بودن پسورد هم از تابع زیر $hash = '$1$toHVx1uW$KIvW9yGZZSU/1YOidHeqJ/'; if (password_verify('123456', $hash)) { echo 'Password is valid!'; } else { echo 'Invalid password.'; } جسارتا کجا باید از این کد استفاده کنم؟ جایی که پاسورد رو اد میکنم توی دیتابیس یا جایی که تیبل دیتابیس و در نتیجه ستون پسورد رو میسازم؟ نقل قول لینک ارسال به اشتراک گذاری در سایت های دیگر
جواد زبیدی زاده 53 ارسال شده در ۲۶ مهر ۱۳۹۶ مالک گزارش اشتراک گذاری ارسال شده در ۲۶ مهر ۱۳۹۶ سلام سوالاتون به این تاپیک ربطی نداره لطفا تاپیک جدیدی باز کنید برای هر سوال تشکر نقل قول لینک ارسال به اشتراک گذاری در سایت های دیگر
پست های پیشنهاد شده
به گفتگو بپیوندید
هم اکنون می توانید مطلب خود را ارسال نمایید و بعداً ثبت نام کنید. اگر حساب کاربری دارید، برای ارسال با حساب کاربری خود اکنون وارد شوید .