반응형

//예제 샘플 : https://gist.github.com/vlucas/2bd40f62d20c1d49237a109d491974eb?permalink_comment_id=2981938  

//샘플 변경 내용: const ENCRYPTION_KEY  대신 GetHashKey() 를 사용하여 OS 에 로그인 한 사용자 이름으로 Hash 코드 생성 후 필요한 길이 만큼만 사용하여 암호화/복호화에 사용

//////////////////////////////////////////////////////////////////////////////////////////////////
//  string -> encrypt
//  encrypted string -> decrypt
//////////////////////////////////////////////////////////////////////////////////////////////////

const crypto = require('crypto');
const os = require('os');

//(예제코드) const ENCRYPTION_KEY = process.env.ENCRYPTION_KEY; // Must be 256 bits (32 characters)
 
const IV_LENGTH = 16; // For AES, this is always 16


module.exports = {

    //암호화
    encryptHandler : function(text)
    {
         let iv = crypto.randomBytes(IV_LENGTH);
        //(예제코드) let cipher = crypto.createCipheriv('aes-256-cbc', Buffer.from(ENCRYPTION_KEY), iv);
         let cipher = crypto.createCipheriv('aes-256-cbc', Buffer.from(GetHashKey()), iv);
         let encrypted = cipher.update(text);
         encrypted = Buffer.concat([encrypted, cipher.final()]);
         return iv.toString('hex') + ':' + encrypted.toString('hex');
    },

    //복호화
    decryptHandler : function(text)
    {
        let textParts = text.split(':');
        let iv = Buffer.from(textParts.shift(), 'hex');
        let encryptedText = Buffer.from(textParts.join(':'), 'hex');
        //(예제코드)  let decipher = crypto.createDecipheriv('aes-256-cbc', Buffer.from(ENCRYPTION_KEY), iv);
        let decipher = crypto.createDecipheriv('aes-256-cbc', Buffer.from(GetHashKey()), iv);
        let decrypted = decipher.update(encryptedText);      
        decrypted = Buffer.concat([decrypted, decipher.final()]);
        return decrypted.toString();
    }
 
}

//사용자 이름으로 Hash 값 발생
//발생 후 32 길이만 사용
function GetHashKey()
{    
    var result = crypto.createHash('sha256').update(os.userInfo().username).digest('hex');
    result = result.substring(0, 32);
    console.log("gethashkey -> hash = "+ result);
    return result;
}

 

반응형
반응형

Spring 웹싸이트 : www.spring.io   

 

Spring makes Java simple.

Level up your Java code and explore what Spring can do for you.

spring.io

  1. Goals
    1. Java POJO
    2. DI - loose coupling
    3. AOP
    4. Minimize boilerplate java code
  2. Core Containter: Bean Factory for creating beans
    1. Beans
    2. Core
    3. SpEL
    4. Context
  3. Infrastructure
    1. AOP (Ascpect Oriented Proggramming): Add Functionallity to objects - logging, security, transactions etc..
    2. Aspects
    3. Instrumentation
      1. Java agaents to remotely monitor your app with JMX (Java Management Extension)
    4. Messaging
  4. Data Access Later
    1. JDBC 
    2. ORM (hibernate): Object to Relational Mapping
    3. JMS (Java Message Service)
    4. Transactions: Makes heavy use of AOP behind the scenes
    5. OXM
  5. Web Layer (Spring MVC)
    1. Servlet
    2. WebSocket
    3. Web
    4. Portlet
  6. Test Layer (TDD - Test-Driven Development)
    1. Unit
    2. Integration
    3. Mock

 

반응형
반응형

[ref:] https://www.electronjs.org/docs/latest/api/browser-window#event-close

 

BrowserWindow | Electron

Create and control browser windows.

www.electronjs.org

const dialogPop = require('electron').remote.dialog;
// it starts with onbeforeunload with the boolean value true
let doNotCloseWindow = true;

window.onbeforeunload = (event) => {

    //if the boolean value is true, the window do not close
    if(doNotCloseWindow)
    {
        // equivalent to `return false` but not recommended
        // it will prevent the window to be closed
        event.returnValue = true; 
   
        //open popup
        const dialogOpts = {
            type: 'info',                
            title: 'close',
            message: 'r u sure?',
            buttons: ['OK', 'Cancel']
        };

        dialogPop.showMessageBox(dialogOpts).then((response) => {

            // if OK, response.resonse = 0, else 1
            if(response.response === 0){
                doNotCloseWindow = false;
                // it will call onbeforeunload again
                window.close();
            }      

        });
    }
    else
    {
        console.log('It should be closed')

        //the window closes no matter what.. so not sure if destroy() works
        window.destroy();
    }
}
반응형
반응형

하드 디스크가 2개 달린 PC 에 윈10 재설치 후, 부팅 드라이브는 C 로 잘 붙어 있는데, 다른 디스크는 D 였다가 부팅만 하면 안보이네요. 컴퓨터 관리-디스크 관리-드라이브 문자 및 경로지정-드라이브문자할당 으로 D 드라이브 문자를 선택 해 주는 방법을 반복하다 다음 해결책을 발견하여 공유 합니다.

1. 명령 프롬프트를 실행합니다.

2. "diskpart"를 입력하여 diskpart에 접속합니다.

3. "list volume"을 입력하여 현재 문제를 겪고 계신 드라이브의 volume 번호를 확인합니다.

4. 문제가 있는 volume의 번호를 x라고 했을 때, "select volume=x"를 입력하여 해당 volume을 선택합니다.

- 예를 들어, 문제를 겪고 계신 volume이 volume 2인 경우, "select volume=2"를 입력하시면 됩니다.

5. "attributes volume"을 입력하여 해당 volume의 "숨김" 혹은 "기본 드라이브 문자 없음" 속성값이 "예"인 속성을 확인합니다.

6-1. "숨김" 속성의 값이 "예"인 경우, "attributes volume clear hidden"을 입력합니다.

6-2. "기본 드라이브 문자 없음" 속성의 값이 "예"인 경우, "attributes volume clear nodefaultdriveletter"를 입력합니다.

6-3. 두 속성 모두 "예"인 경우, 6-1과 6-2를 모두 입력합니다.

7. "attributes volume"을 다시 입력하여 해당 volume의 "숨김" 혹은 "기본 드라이브 문자 없음" 속성의 값이 "아니요"로 변경되었는지 확인합니다.

8. 정상적으로 변경되었다면, "exit"를 입력하여 diskpart에서 빠져나오신 후, 명령 프롬프트를 종료하시고 재부팅하여 해당 드라이브의 드라이브 문자가 자동적으로 할당되는지 확인합니다.

 

반응형
반응형

반응형
반응형
반응형
반응형
반응형
반응형

stackoverflow.com/questions/43687058/how-do-i-include-nuget-packages-in-my-solution-for-net-core-projects

 

How do I include NuGet packages in my solution for .Net Core projects?

With classic .Net projects, if I added a reference to a NuGet package, it would get downloaded to a packages folder and I could check that into source control along with the rest of my code. This

stackoverflow.com

sln 파일이 있는 곳에 NuGet.Config 파일을 만들어 다음 내용을 입력 후, 저장하고, 솔루션을 다시 오픈 하면 된다.

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <config>
    <add key="globalPackagesFolder" value=".\packages" />
  </config>
</configuration>

반응형
반응형

참고: docs.microsoft.com/ko-kr/dotnet/csharp/language-reference/builtin-types/value-tuples

 

튜플 형식 - C# 참조

C# 튜플 알아보기: 관련 데이터 요소를 느슨하게 그룹화하는 데 사용할 수 있는 간단한 데이터 구조

docs.microsoft.com

튜플 테스트

      static (int plus, int minus, int multiply) returnMultiple(int a, int b)
        {

            int plus = a + b;
            int minus = a - b;
            int multiply = a * b;
            return (plus, minus, multiply);
        }

        static void testMethod()
        {
            var a = returnMultiple(3, 2);
            Console.WriteLine(a.minus);
            Console.WriteLine(a.plus);
            Console.WriteLine(a.multiply);
        }

반응형
반응형

리눅스 상에서 

touch filename

으로 파일내 변화없이 시간 업데이트가 가능합니다.

windows 의 batch 명령어에서도 같은 기능을 하는 명령어를 찾아보았는데요

echo. >> filename

파일 내부 마지막에 공간을 넣어 파일 업데이트 하는 방식으로 시간 없데이트가 됩니다.

 

반응형

+ Recent posts