2017-04-02 1 views
2

앱을 개발 중이지만 문제가 발생했습니다. 나는 암호화 할 수 있지만 해독 할 수는 없다. 내가 고칠 수있게 도와 줄 수 있니?android에서 AESCrypt로 암호화 및 암호 해독

앱에 중요한 데이터가 있고 암호화 된 데이터로 Firebase을 보내고 싶지만 목록에 계속 해독됩니다. passwordMessage 변수는 같은 일 (selectedUser.getPassword().trim())를 할당

public class UserActivity extends AppCompatActivity { 

private EditText input_tipo, input_id, input_password; 
private ListView list_data; 
private FirebaseDatabase mFirebaseDatabase; 
private DatabaseReference mDatabaseReference; 
private FirebaseAnalytics firebaseAnalytics; 
private List<User> list_users = new ArrayList<>(); 
private User selectedUser; 
private FirebaseAuth mAuth; 
private FirebaseUser mUser; 
private String encryptPass, decryptPass; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_user); 

    Toolbar tool = (Toolbar) findViewById(R.id.toolbar); 
    tool.setTitle("MySecurity"); 
    setSupportActionBar(tool); 

    input_tipo = (EditText) findViewById(R.id.tipo); 
    input_id = (EditText) findViewById(R.id.id); 
    input_password = (EditText) findViewById(R.id.password); 
    list_data = (ListView) findViewById(R.id.list_data); 

    mAuth = FirebaseAuth.getInstance(); 
    mUser = mAuth.getCurrentUser(); 

    list_data.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { 
      User user = (User) adapterView.getItemAtPosition(i); 
      selectedUser = user; 

      input_tipo.setText(user.getTipo()); 
      input_id.setText(user.getId()); 
      input_password.setText(user.getPassword()); 

     } 
    }); 


    initFirebase(); 
    addEventFirebaseListener(); 
    findNetwork(); 

} 


private void findNetwork() { 
    ConnectivityManager CM = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE); 
    NetworkInfo ninfo = CM.getActiveNetworkInfo(); 
    if (ninfo != null && ninfo.isConnectedOrConnecting()) { 
     Toast.makeText(getBaseContext(), "Connesso in Firebase:" + ninfo.getTypeName(), Toast.LENGTH_LONG).show(); 
    } else { 
     Toast.makeText(getBaseContext(), "Connessione internet assente", Toast.LENGTH_LONG).show(); 
    } 
} 


private void addEventFirebaseListener() { 
    list_data.setVisibility(View.VISIBLE); 
    mDatabaseReference.child("users").addValueEventListener(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 
      if (list_users.size() > 0) 
       list_users.clear(); 
      for (DataSnapshot postSnapshot : dataSnapshot.getChildren()) { 
       User user = postSnapshot.getValue(User.class); 
       list_users.add(user); 
      } 
      ListViewAdapter adapter = new ListViewAdapter(UserActivity.this, list_users); 
      list_data.setAdapter(adapter); 
      list_data.setVisibility(View.VISIBLE); 
     } 


      @Override 
     public void onCancelled(DatabaseError databaseError) { 
     } 
    }); 
} 

private void initFirebase() { 
    FirebaseApp.initializeApp(this); 
    mFirebaseDatabase = FirebaseDatabase.getInstance(); 
    FirebaseDatabase.getInstance().setPersistenceEnabled(true); 
    firebaseAnalytics = FirebaseAnalytics.getInstance(this); 
    firebaseAnalytics.setAnalyticsCollectionEnabled(true); 
    firebaseAnalytics.setMinimumSessionDuration(5000); 
    mDatabaseReference = mFirebaseDatabase.getReference().child("users").child(mUser.getUid()); 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.home, menu); 
    return super.onCreateOptionsMenu(menu); 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    if (item.getItemId() == R.id.menu_add) { 
     createUser(); 
    } else if (item.getItemId() == R.id.menu_remove) { 
     deleteUser(selectedUser); 
    } else if (item.getItemId() == R.id.menu_deselect) { 
     DeselectedUser(selectedUser); 
    }else if(item.getItemId()== R.id.menu_decrypt){ 
     DecryptUser(selectedUser); 
    } 
    return true; 
} 

private void DecryptUser(User selectedUser) { 
    if (selectedUser != null) { 
     mDatabaseReference.child("users").child(selectedUser.getUid()); 

     String password = selectedUser.getPassword().trim(); 
     String Message= selectedUser.getPassword().trim(); 

     try { 
      decryptPass= AESCrypt.decrypt(password, Message); 
      input_tipo.setText(input_tipo.getText().toString()); 
      input_id.setText(input_id.getText().toString()); 
      input_password.setText(decryptPass); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

    } 
} 


private void DeselectedUser(User selectedUser) { 
    if (selectedUser != null) { 
     mDatabaseReference.child("users").child(selectedUser.getUid()); 
     clearEditText(); 
    } 
} 

private void deleteUser(User selectedUser) { 
    if (selectedUser != null) { 
     mDatabaseReference.child("users").child(selectedUser.getUid()).removeValue(); 
     clearEditText(); 
    } 
} 


private void createUser() { 

    String password = input_password.getText().toString().trim(); 
    String Message= input_password.getText().toString().trim(); 

    try { 
     encryptPass = AESCrypt.encrypt(password, Message); 
     User user1= new User(UUID.randomUUID().toString(), input_tipo.getText().toString(), 
       input_id.getText().toString(), encryptPass); 
     mDatabaseReference.child("users").child(user1.getUid()).setValue(user1); 
     clearEditText(); 

    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

} 

private void clearEditText() { 
    input_tipo.setText(""); 
    input_id.setText(""); 
    input_password.setText(""); 
} 

@Override 
protected void onStop() { 
    super.onStop(); 
    finish(); 
} 

} 
+0

"암호화 할 수는 있지만 해독 할 수는 없습니다." 해독하려고하면 어떻게됩니까? –

+0

그것은 암호화 된 상태로 유지됩니다. 문자열은 암호 해독되지 않습니다. – Marco

답변

0

:

내 코드입니다. 당신이하고있는 일은 사용자 암호를 사용하여 사용자 암호의 암호 해독을 시도하는 것입니다. 아마도 해독하고자하는 암호문을변수에 할당해야 할 것입니다.

+0

시도했지만 오류가 발생했습니다. 실제로 AESCrypt를 사용하는 방법을 이해하지 못했습니다. – Marco

+0

확실히 말해서 사용자 클래스를보고 싶습니다. 게시 한 코드에 따르면 사용자의 비밀번호를 저장하지 않은 것으로 보입니다. 그러나, 당신은 그 자체로 키를 사용하여 그것을 암호화하고 있습니다. (나는 당신이 그것에 의해 성취하려는 것을 확신하지 못합니다.) 어쩌면 당신은 2 개의 EditText를 가지기를 원할 것입니다, 하나는 키를위한 것이고 다른 하나는 평문이나 암호문을위한 것입니까? – jackgu1988

+0

AESCrypt 클래스를 게시 할 수도 있다면,이 작업 중 어떤 작업을 수행하고 있는지 잘 모르므로 좋습니다. – jackgu1988