Jak skonfigurować szyfrowanie i deszyfrowanie między aplikacją internetową Android i ASP.Net?

W tym szyfrowaniu użyjemy tajnego klucza do zaszyfrowania ciągu. Zastosowanym algorytmem będzie AES z trybem CBC (Cipher Block Chaining).

Kod C# użyje dopełnienia PKCS7, ponieważ PKCS5 nie jest tam dostępny. W Androidzie używa wewnętrznie dopełnienia PKCS5, nawet jeśli określimy dopełnienie PKCS7 w transformacji szyfru. Tak więc określamy również tryb dopełniania PKCS5. Podczas testów oba dają te same prawidłowe wyniki.

W tej metodzie szyfrowania pojedynczy klucz jest używany zarówno jako klucz tajny, jak i sól.

Podczas używania różnych kluczy dla klucza tajnego i soli istniała pewna różnica między wersjami salt zakodowanymi Base64 (lub wektorem inicjującym). Wersje zakodowane w Base64 zostały utworzone przez kody Androida i C# i różniły się od siebie.

Aby temu zaradzić, użyliśmy jednego klucza, który będzie służył zarówno jako tajny klucz, jak i sól.

Kod części dla Androida wygląda następująco:

public class EncryptionUtils { prywatne końcowe String characterEncoding = "UTF-8"; private final String cipherTransformation = "AES/CBC/PKCS5Padding"; private final String aesEncryptionAlgorithm = "AES"; public String encrypt(String plainText, String key) generuje UnsupportedEncodingException, InvalidKeyException, NoSuchAlgorithmException, NoSuchPaddingException, InvalidAlgorithmParameterException, IllegalBlockSizeException, BadPaddingException { byte [] plainTextbytes = plainText.getBytes(characterEncoding); bajt [] keyBytes = getKeyBytes(klucz); // zwróć Base64.encodeToString(encrypt(plainTextbytes,keyBytes, keyBytes), Base64.DEFAULT); return Base64.encodeToString(encrypt(plainTextbytes,keyBytes, keyBytes), Base64.NO_WRAP); } public String decrypt(String zaszyfrowany tekst, klucz ciągu) zgłasza KeyException, GeneralSecurityException, GeneralSecurityException, InvalidAlgorithmParameterException, IllegalBlockSizeException, BadPaddingException, IOException { byte [] cipheredBytes = Base64.decode(encryptedText, Base64.DEFAULT); byte[] keyBytes = getKeyBytes(klucz); zwróć nowy String (decrypt(cipheredBytes, keyBytes, keyBytes), characterEncoding); } public byte [] decrypt( byte[] cipherText, byte[] key, byte [] initialVector) zgłasza NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, InvalidAlgorithmParameterException, IllegalBlockSizeException, BadPaddingException { Cipher Transcipher = Cipher.getInstance);(cipherTransformation); SecretKeySpec secretKeySpecy = new SecretKeySpec(key, aesEncryptionAlgorithm); IvParameterSpec ivParameterSpec = new IvParameterSpec(initialVector); cipher.init(Cipher.DECRYPT_MODE, secretKeySpecy, ivParameterSpec); tekst zaszyfrowany = cipher.doFinal(zaszyfrowany tekst); zwróć tekst zaszyfrowany; } public byte[] encrypt(byte[] plainText, byte[] key, byte [] initialVector) zgłasza NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, InvalidAlgorithmParameterException, IllegalBlockSizeException, BadPaddingException { Cipher cipher = Cipher.getInstance);(cipherTransformation); SecretKeySpec secretKeySpec = new SecretKeySpec(key, aesEncryptionAlgorithm); IvParameterSpec ivParameterSpec = new IvParameterSpec(initialVector); cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec, ivParameterSpec); zwykły tekst = cipher.doFinal(zwykły tekst); return zwykły tekst; } private byte[] getKeyBytes(String key) wyrzuca UnsupportedEncodingException{ byte [] keyBytes= new byte[16]; byte [] parametrKeyBytes= key.getBytes(znakKodowanie); System .arraycopy(parameterKeyBytes, 0 , keyBytes, 0, Math.min(parameterKeyBytes.length, keyBytes.length)); zwróć keyBytes; } } Zalecana lektura: Skopiuj do schowka w JavaScript

Kod części C# wygląda następująco:

// Szyfruje zwykły tekst za pomocą 128-bitowego klucza AES i szyfru blokowego łańcuchowego oraz zwraca ciąg publiczny zakodowany w base64 Encrypt(String plainText, String key) { var plainBytes = Encoding.UTF8.GetBytes(plainText); return Convert.ToBase64String(Encrypt(plainBytes, GetRijndaelManaged(klucz))); } public string Decrypt(String zaszyfrowany tekst, String klucz) { var zaszyfrowanyBytes = Convert.FromBase64String(encryptedText); return Encoding.UTF8.GetString(Decrypt(encryptedBytes, GetRijndaelManaged(klucz))); } public byte[] Encrypt(byte[] plainBytes, RijndaelManaged rijndaelManaged) { return rijndaelManaged.CreateEncryptor() .TransformFinalBlock(plainBytes, 0, plainBytes.Length); } public byte[] Decrypt(byte[] cryptoData, RijndaelManaged rijndaelManaged) { return rijndaelManaged.CreateDecryptor() .TransformFinalBlock(encryptedData, 0, cryptoData.Length); } public RijndaelManaged GetRijndaelManaged(String secretKey) { var keyBytes = new byte[16]; var secretKeyBytes = Kodowanie.UTF8.GetBytes(secretKey); Array.Copy(secretKeyBytes, keyBytes, Math.Min(keyBytes.Length, secretKeyBytes.Length)); return new RijndaelManaged { Mode = CipherMode.CBC, Padding = PaddingMode.PKCS7, KeySize = 128, BlockSize = 128, Key = keyBytes, IV = keyBytes }; }

Za pomocą powyższego kodu można zaszyfrować ciąg znaków na jednej platformie, a następnie odszyfrować go na drugiej platformie i odwrotnie.

Zalecane przeczytanie: Jak wyświetlić kod pliku „.ctp” tak kolorowy jak plik „.php” w NetBeans?

How to save data to Firebase in Android?

Cele:

Celem tego bloga jest poinformowanie czytelników o tym, jak zapisywać dane w bazie danych Firebase Realtime systemu Android. W tej bazie danych można zapisywać proste typy danych, takie jak łańcuchy, a także bardziej skomplikowane typy danych, takie jak obiekty Java.

Wymagania wstępne:

Aby korzystać z Bazy danych czasu rzeczywistego Firebase w systemie Android, musimy mieć projekt Android Studio do tworzenia aplikacji na Androida. Poza tym potrzebujemy projektu Firebase, aby połączyć bazę danych czasu rzeczywistego Firebase z aplikacją na Androida.

Aby utworzyć nowy projekt Firebase, wykonaj poniższe czynności:- �

1. Otwórz adres URL – https://console.firebase.google.com

2. Następnie kliknij „Dodaj projekt“.

3.Następnie wpisz nazwę projektu Firebase i zaakceptuj warunki. Następnie kontynuuj, klikając „KONTUNUUJPrzycisk “.

4.�Następnie na następnym ekranie powitalnym kliknij „Dodaj Firebase do swojej aplikacji na Androida“. W ten sam sposób wprowadź nazwę pakietu i kliknij Dalej.

5. Teraz pobierz plik google-services.json do swojego systemu lokalnego. Następnie skopiuj ten plik do określonej lokalizacji w projekcie Android Studio.

6. Wykonaj mały proces w następnym kroku, aby dodać 3 wiersze kodu do kompilacji. Pliki Gradle na poziomie projektu i aplikacji.

7.�Następnie zakończ dodawanie aplikacji na Androida do projektu Firebase.

8. Otwórz sekcję Baza danych, klikając „Baza danych„ w lewym menu. Następnie kliknij „Utwórz bazę danych” link.

9. Teraz proces tworzenia projektu Firebase dobiegł końca.

Zalecane przeczytanie: Jak pobrać dane z Firebase w Androidzie?

Dodaj następujący wiersz w kompilacji na poziomie aplikacji. Gradle, aby dodać bibliotekę i zacząć korzystać z Bazy danych czasu rzeczywistego Firebase.

implementacja „com.google.firebase:firebase-database:16.0.6”

Implementacja kodu

Zanim przejdziemy dalej, zrozumiemy, co to jest odniesienie do Firebase? W bazie danych Firebase dane są przechowywane w określonej lokalizacji. Dlatego wskaźnik do tej lokalizacji jest nazywany odniesieniem Firebase. Wiele odniesień wskazuje tę samą lokalizację, jeśli są inicjowane tą samą ścieżką.

Utwórz instancję bazy danych Firebase, wpisując następujący wiersz kodu:

prywatne FirebaseDatabase mDatabase = FirebaseDatabase.getInstance();

Teraz utwórz odniesienia do ścieżek, w których dane będą przechowywane w Bazie danych czasu rzeczywistego. Ponieważ dane są przechowywane w formacie JSON w bazie danych Firebase, ścieżki określone w odwołaniach są kluczami obiektu JSON.

Zalecane przeczytanie: Jak pobrać dane z Firebase w języku Swift (iOS)?

Aby utworzyć odwołanie do węzła głównego w bazie danych, należy dodać następujący wiersz kodu:

private DatabaseReference mDatabaseReference = mDatabase.getReference();

Następnie utwórz element potomny w węźle głównym w bazie danych i użyj tego klucza potomnego, aby dodać odpowiednie dane. Następnie do bazy danych można dodać ciąg, postępując zgodnie z poniższymi liniami kodu:

mDatabaseReference = mDatabase.getReference().child("nazwa"); mDatabaseReference.setValue("Kaczor Donald");

Powyższe wiersze kodu wstawiają dane do bazy danych. Baza danych w projekcie Firebase będzie wyglądać następująco:

Baza danych Firebase Realtime obsługuje również zapisywanie złożonych obiektów Java. Dlatego najpierw należy utworzyć klasę modelu w celu zapisania obiektów Java. Upewnij się również, że dodałeś pusty konstruktor i gettery każdego atrybutu w klasie.

Poniżej znajduje się kod dla klasy modelu demonstracyjnego:

Poniżej znajduje się kod do zapisania obiektu tej klasy w bazie danych Firebase:

Użytkownik użytkownik = nowy Użytkownik("Mickey", 18); mDatabaseReference = mDatabase.getReference().child("użytkownik"); mDatabaseReference.setValue(użytkownik);

Wspomniany powyżej kod umieściłby dane obiektu w bazie danych Firebase w następujący sposób:

Zalecane przeczytanie: Jak zapisać dane w Firebase w języku Swift (iOS)?

Wnioski:

Teraz wiesz, jak zapisywać dane w Bazie danych czasu rzeczywistego Firebase. Ponadto Knowband oferuje moduł eCommerce Mobile App Builder dla właścicieli sklepów internetowych. Tak więc wtyczka Mobile App Maker jest dostępna dla platform takich jak PrestaShop, OpenCart, WooCommerce i Magento 2. W ten sposób za pomocą kilku kliknięć i bez trudności możesz stworzyć natywną, responsywną aplikację na smartfony i tablety.

Jak odbywa się zarządzanie sesjami w systemie Android?

W systemie Android zarządzanie sesjami odbywa się przy użyciu niektórych technik przechowywania danych. Dane te mogą być przechowywane w niektórych zmiennych globalnych, bazie danych lub preferencjach aplikacji.

Ale jest problem ze zmiennymi globalnymi. Zmienne globalne mogą przechowywać dane tylko do momentu otwarcia aplikacji. Po zamknięciu aplikacji zmienne globalne ulegają zniszczeniu, a ich wartości zostają utracone.

Dane przechowywane w bazie danych oraz preferencje aplikacji nie giną po zamknięciu aplikacji.

Są one więc używane do zarządzania sesjami. Jednak przechowywanie i dostęp do danych w bazie danych jest wolniejszy w porównaniu z preferencjami.

Z tego powodu preferencje są wykorzystywane do zarządzania sesjami.

W kontekście Androida te preferencje są znane jako SharedPreferences. Pozwalają one na szybsze przechowywanie, dostęp i aktualizację danych.

SharedPreferences są zwykle używane do przechowywania ustawień aplikacji.

Znajdź poniższe kroki, aby użyć SharedPreferences w aplikacji do przechowywania i uzyskiwania dostępu do danych w celu utrzymania sesji.

1. Zainicjuj edytor SharedPreferences, aby przechowywać dane w SharedPreferences aplikacji.

Preferencje SharedPreferences = getApplicationContext().getSharedPreferences("preferencje-nazwa-klucza", MODE_PRIVATE); SharedPreferences.Editor edytor = prefs.edit();

2. Umieść wartość w obiekcie edytora, aby zapisać w SharedPreferences. Mogą to być wartości typu String, boolean, int, float itp. Po dodaniu wartości wykonaj metodę commit() Editor, aby zapisać wartości.

editor.putString("klucz-nazwa użytkownika", "Jan Kowalski"); edytor.commit();

3. Aby pobrać dane z SharedPreferences, nie jest potrzebny obiekt Editor. Po prostu uzyskaj wymagany ciąg lub dowolną inną wartość za pomocą odpowiedniej metody.

Preferencje SharedPreferences = getApplicationContext().getSharedPreferences("preferences-key-name", MODE_PRIVATE); String nazwa użytkownika = prefs.getString("klucz-nazwa użytkownika", "wartość-domyślna");

Drugim parametrem metody getString() jest zwracana wartość domyślna na wypadek, gdyby w preferencjach odpowiadających temu kluczowi nie zapisano żadnej wartości.

4. Aby wyczyścić określony klucz SharedPreference, użyj metody remove().

Preferencje SharedPreferences = getApplicationContext().getSharedPreferences("preferencje-nazwa-klucza", MODE_PRIVATE); SharedPreferences.Editor edytor = prefs.edit(); editor.remove("klucz-nazwa użytkownika"); edytor.commit();

5. Aby wyczyścić wszystkie zapisane SharedPreferences, użyj metody clear().

Preferencje SharedPreferences = getApplicationContext().getSharedPreferences("preferencje-nazwa-klucza", MODE_PRIVATE); SharedPreferences.Editor edytor = prefs.edit(); edytor.wyczyść(); edytor.commit();

Znajdź poniżej przykład użycia tego SharedPreferences do zarządzania sesją:-

Kiedy użytkownik loguje się do aplikacji, zapisz nazwę użytkownika lub inną odpowiednią wartość użytkownika w SharedPreferences. Użyj tej zapisanej wartości, aby ponownie zalogować użytkownika, gdy aplikacja zostanie ponownie otwarta lub do tej wartości można uzyskać dostęp w dowolnym działaniu w aplikacji, aby uzyskać nazwę użytkownika. Gdy użytkownik kliknie Wyloguj, wyczyść pola związane z użytkownikiem, aby go wylogować.

Umieść elementy w liniowej modzie i na dole ekranu w systemie Android

Najlepszym sposobem na umieszczenie dowolnych elementów w liniowy sposób w systemie Android jest użycie LinearLayout. Określ atrybut "orientacja"LinearLayout to"pionowy‘.

Teraz dowolna liczba elementów umieszczonych w LinearLayout będzie w kolejności pionowej.

Aby wyrównać elementy u dołu ekranu, użyj polecenia ConstraintLayout i dodaj wiązania do LinearLayout, aby dołączyć je do dolnej części ekranu.

Znajdź przykładowy kod poniżej, pod którym znajdują się dwa okna TextView umieszczone jeden pod drugim, a kontener LinearLayout jest dołączony do dolnej części ekranu.

<? xml version = "1.0" encoding = "utf-8"?> <android.support.constraint.ConstraintLayout xmlns: android = "https://schemas.android.com/apk/res/android" xmlns: app = "https://schemas.android.com/apk/res-auto" xmlns: tools = "https://schemas.android.com/tools" android: layout_width = "match_parent" android: layout_height = "match_parent" tools: context = ". MainActivity"> <LinearLayout android: layout_width = "match_parent" android: layout_height = "wrap_content" android: orientation = "vertical" app: layout_constraintBottom_toBottomOf = "parent" app: layout_constraintEnd_toEndOf = "parent" app: layout_constraintStart_toStartOf = "rodzic "> <TextView android: id =" @ + id / element1 "android: layout_width =" wrap_content "android: layout_height =" wrap_content "android: text =" To jest element 1 "/> <TextView android: id =" @ + id / element2 "android: layout_width =" match_parent "android: layout_height =" wrap_content "android: text =" To jest element 2 "/> </ LinearLayout> </ android.support.constraint.ConstraintLayout>

Jak utworzyć okno dialogowe alertów w systemie Android?

Okno dialogowe ostrzeżenia może być użyte do wyświetlenia komunikatu w wyskakującym oknie dialogowym lub wyświetlenia pola tekstowego do wprowadzenia przez użytkownika lub wyświetlenia dowolnego niestandardowego widoku w oknie dialogowym.

Aby widok był wyświetlany w oknie dialogowym, widok musi zostać utworzony programowo lub za pomocą XML. Następnie należy ustawić widok w oknie dialogowym, aby ten widok był widoczny dla użytkownika w oknie dialogowym.

Znajdź poniższe kroki, aby utworzyć okno dialogowe, w którym będzie pole do wprowadzania danych przez użytkownika.

1. Utwórz widok, który będzie wyświetlany w oknie dialogowym.

final EditText userInput = new EditText (this);

2. Tworzenie i wyświetlanie okna dialogowego.

nowy AlertDialog.Builder (this) .setTitle („Tytuł okna dialogowego idzie tutaj”) .setView (userInput) .setPositiveButton („Submit”, nowy DialogInterface.OnClickListener () {@Override public void onClick (dialog DialogInterface, int, ) {// Obsługuj swoje działanie tutaj, gdy klikniesz przycisk „Prześlij”}}) .setNegativeButton („Anuluj”, nowy DialogInterface.OnClickListener () {@Override public void onClick (DialogInterface dialog, int, który) {// Obsługuj swoje działanie tutaj po kliknięciu przycisku „Anuluj”}}) .show ();