Solidity의 암호

2841 단어

왜 필요한가요?



요청 기능 및 액세스 제어에 의존하는 withdraw()를 통해 청산될 수 있는 유동성을 계약에 고정했다고 가정합니다. 담당 EOA에 액세스할 수 있는 사람은 필요할 때 자금을 인출할 수 있습니다. 이를 위한 더 좋은 방법은 비밀번호를 설정하는 것입니다. 그러면 개인 키가 유출될 경우 해커가 여전히 비밀번호를 입력해야 합니다.

어떻게 구현됩니까?


  • 사용자가 암호를 입력하고 Keccak256을 통해 해시되고 해시 문자열 앞에 "0x"가 추가됩니다.
  • 배포 시 사용자가 생성자를 통해 암호를 설정합니다( _setNewPassword() )
  • 그런 다음 사용자는 암호를 확인하고( _testPassword() ) 예상 암호와 새 암호를 입력할 수 있습니다(현재 암호는 온체인 데이터에 의해 선언되므로).

  • 견고성 코드




    contract onChainPassword
    {
        bytes32 private globalPassword;
    
        constructor(bytes32 _hashedPassword) 
        {
            globalPassword = _hashedPassword;
        }
    
        function _checkPassword(string memory _password, bytes32 _newPassword)
            public returns (bool)
        {
            bool decision = keccak256(abi.encodePacked(_password))==globalPassword;
            _setNewPassword(_newPassword);
            return decision;
        }
    
        function _setNewPassword(bytes32 _newPassword) internal
        {
            globalPassword = _newPassword;
        }
    }
    


    부인 성명



    광범위한 테스트 없이 금요일 프로젝트를 메인넷에 올리지 마십시오. 저는 분산형입니다.

    좋은 웹페이지 즐겨찾기