반응형

아파치 웹 서버 실행

 

아파치, php 버전 확인

$ apachectl -v

$ php -v

 

아파치, php 설치 (설치되어 있지 않을 경우)

$ brew install httpd

$ brew install php

 

아파치 실행

$ sudo launchctl load -w /System/Library/LaunchDaemons/org.apache.httpd.plist

 

아파치 종료

$ sudo launchctl unload -w /System/Library/LaunchDaemons/org.apache.httpd.plist

 

기본 웹서버 패스

/Library/WebServer/Documents/index.html

 

브라우저로 확인 

http://127.0.0.1

http://localhost

 

 

 

[ 요약 ]

sudo vi /private/etc/hosts

# mysite

127.0.0.1       ww1.mysite.net

127.0.0.1       ww2.mysite.net

 

sudo vi /private/etc/apache2/httpd.conf

 

sudo vi /private/etc/apache2/extra/httpd-vhosts.conf

<VirtualHost *:80>
    ServerName     ww1.mysite.net
    ServerAdmin    netcanis@mysite.net
    DocumentRoot   "/private/etc/apache2/htdocs-ww1"
    CustomLog      "/private/var/log/apache2/ww1.access.log" common
    ErrorLog       "/private/var/log/apache2/ww1.error.log"
    <Directory "/private/etc/apache2/htdocs-ww1">
        Options Indexes MultiViews
        AllowOverride None
        Require all granted
    </Directory>
</VirtualHost>



<VirtualHost *:80>
    ServerName     ww2.mysite.net
    ServerAdmin    netcanis@mysite.net
    DocumentRoot   "/private/etc/apache2/htdocs-ww2"
    CustomLog      "/private/var/log/apache2/ww2.access.log" common
    ErrorLog       "/private/var/log/apache2/ww2.error.log"
    <Directory "/private/etc/apache2/htdocs-ww2">
        Options Indexes MultiViews
        AllowOverride None
        Require all granted
    </Directory>
</VirtualHost>

 

 

테스트

sudo apachectl configtest

 

재시작

sudo apachectl graceful

 

브라우저 테스트

http://ww1.mysite.net

http://ww2.mysite.net

 

 

 

웹서버 패스

/private/etc/apache2/htdocs-ww1/index.html 

/private/etc/apache2/htdocs-ww2/index.html 

 

로그파일 패스

/private/var/log/apache2/ww1.access.log

/private/var/log/apache2/ww1.error.log

/private/var/log/apache2/ww2.access.log

/private/var/log/apache2/ww2.error.log

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

반응형

'개발 > Note' 카테고리의 다른 글

Packet Format for the LE Uncoded PHYs  (0) 2024.01.09
Push Notification  (1) 2023.12.27
Unwind Segue 사용방법  (0) 2023.01.11
랜덤 seed 초기화  (0) 2022.11.18
matplotlib 사용  (0) 2022.11.18
블로그 이미지

SKY STORY

,
반응형

다음은 ViewController가 종료될 때 이전 ViewController에

Unwind Segue 이벤트가 수신되도록 설정하는 방법이다.

 

현재 QRcodeDetailViewController 가 popViewController될때 

이전QRcodeViewController의 특정함수(unwindToQRcodeViewController)를 호출하기 위한 설정

 

다음과 같이 ViewController가 push되어 있을 경우

QRcodeDetailViewController가 pop되어 종료 되었을 때 

Unwind Segue를 이용하여 QRcodeViewController의 

특정 함수 호출방법을 알아본다.

 

 

+ UINavigationViewController

   - QRcodeViewController

   - QRcodeDetailViewController

 

 

 

::::  QRcodeViewController  ::::

 

:::: storyboard ::::

QRcodeDetailViewController 를 Ctrl 버튼을 누른상태에서 Exit버튼 클릭

 

QRcodeDetailViewController 로 연결

 

‘manual’ 선택

 

QRcodeDetailViewController Presenting Segues 설정 확인

 

Unwind segue id 설정 (아래 예에서는 호출되는 함수 이름으로 할당함)

 

QRcodeDetailViewController 클래스 내에서 종료함수 호출

 

QRcodeDetailViewController 가 pop되고나서 종료되면 QRcodeViewController에 선언된 

unwindToQRcodeViewController()함수 호출

 

svc = QRcodeDetailViewController

dvc = QRcodeViewController

segueId = unwindToQRcodeViewController

반응형

'개발 > Note' 카테고리의 다른 글

Push Notification  (1) 2023.12.27
[Mac OS X] Apache Virtual Hosts 설정 설정  (0) 2023.02.21
랜덤 seed 초기화  (0) 2022.11.18
matplotlib 사용  (0) 2022.11.18
git 소스코드 비교  (0) 2022.02.23
블로그 이미지

SKY STORY

,

랜덤 seed 초기화

개발/Note 2022. 11. 18. 13:48
반응형

최초 seed값을 초기화 하지 않으면 동일한 결과 값이 반환되므로

반드시 초기화 처리 하도록 한다.

import random
from datetime import datetime
random.seed(datetime.now())

 

 

 

반응형

'개발 > Note' 카테고리의 다른 글

[Mac OS X] Apache Virtual Hosts 설정 설정  (0) 2023.02.21
Unwind Segue 사용방법  (0) 2023.01.11
matplotlib 사용  (0) 2022.11.18
git 소스코드 비교  (0) 2022.02.23
20진수 변환  (0) 2021.09.16
블로그 이미지

SKY STORY

,

matplotlib 사용

개발/Note 2022. 11. 18. 13:44
반응형

다음 코드는 matplotlib를 사용한 그래프 출력 샘플이다.

import numpy as np
import matplotlib.pyplot as plt
'''
x = np.arange(0,5)
y = x ** 2 
'''

#x= np.array([1,2,3,4,5])
x = np.arange( -5, 5, 0.1)

y1 = np.exp(x)
y2 = pow(np.exp(x), 2)
y3 = pow((1+np.exp(x)), 2)
y4 = np.exp(x) / pow((1+np.exp(x)), 2)


plt.subplot(2, 2, 1)                # nrows=2, ncols=1, index=1
#포맷 문자열 ‘ro’는 빨간색 (‘red’)의 원형 (‘o’) 마커를 의미합니다. 
# '--'은 점선을 의미. (ex. ro, o-, .-, bs, g^, r--,)
plt.plot(x,y1, 'r-')#plt.plot(x1, y1, 'r--', x2, y2, 'bs', x3, y3, 'g^')
plt.title('np.exp(x)')
plt.axis([-5, 5, 0, 5])# xmin, xmax, ymin, ymax
plt.xlabel('x')
plt.ylabel('y')

plt.subplot(2, 2, 2)                # nrows=2, ncols=1, index=2
#포맷 문자열 ‘b-‘는 파란색 (‘blue’)의 실선 (‘-‘)을 의미합니다.
plt.plot(x,y2, 'b-')
plt.title('pow(np.exp(x), 2)')
plt.axis([-5, 5, 0, 5])# xmin, xmax, ymin, ymax
plt.xlabel('x')
plt.ylabel('y')

plt.subplot(2, 2, 3)                # nrows=2, ncols=1, index=2
#포맷 문자열 ‘b-‘는 파란색 (‘blue’)의 실선 (‘-‘)을 의미합니다.
plt.plot(x,y3, 'b-')
plt.title('pow((1+np.exp(x)), 2)')
plt.axis([-5, 5, 0, 5])# xmin, xmax, ymin, ymax
plt.xlabel('x')
plt.ylabel('y')

plt.subplot(2, 2, 4)                # nrows=2, ncols=1, index=2
#포맷 문자열 ‘b-‘는 파란색 (‘blue’)의 실선 (‘-‘)을 의미합니다.
plt.plot(x,y4, 'b-')
plt.title('np.exp(x) / pow((1+np.exp(x)), 2)')
plt.axis([-5, 5, 0, 5])# xmin, xmax, ymin, ymax
plt.xlabel('x')
plt.ylabel('y')




fig1 = plt.gcf()
plt.tight_layout()
plt.show()
plt.draw()
#dpi default=100
fig1.savefig('test.png', dpi=200, facecolor='#eeeeee', edgecolor='blue')

 

반응형

'개발 > Note' 카테고리의 다른 글

Unwind Segue 사용방법  (0) 2023.01.11
랜덤 seed 초기화  (0) 2022.11.18
git 소스코드 비교  (0) 2022.02.23
20진수 변환  (0) 2021.09.16
root-level 디렉토리에 폴더, symbolic link 생성 방법  (0) 2021.03.15
블로그 이미지

SKY STORY

,
반응형

현재 작업중인 소스코드가 git에 마지막으로 commit된 소스코드와

비교를 해야할 경우가 종종 발생한다.

이럴경우 이전 commit코드와 비교하여 추가,삭제 및 수정된 부분을

알 수 있도록 보여주는 기능(Code Review)을 사용하도록 하자. 

 

View / Show Code Review

Shift + Option + Command + Enter

 

'Code Review' 가 활성화되면 Xcode 우상단 아이콘(1번)이 아래 그림과 같이 변경된다.

또한 우측 목록 아이콘을 클릭하여 Inline, Side By Side 비교방법(2번)을 선택할 수 있다.

 

Inline Comparision - 현재 소스코드에서 저장된 코드와의 비교

다음과 같이 변경된 부분은 좌측 라인번호에 파란색 마크가 생긴다.

 

Side By Side Comparision - 현재 소스코드와 저장된 코드를 화면분할 출력하여 비교

다음과 같이 현재 코드와 저장된 코드를 둘다 출력하여 변경된 부분을 비교해 준다.

 

 

반응형

'개발 > Note' 카테고리의 다른 글

랜덤 seed 초기화  (0) 2022.11.18
matplotlib 사용  (0) 2022.11.18
20진수 변환  (0) 2021.09.16
root-level 디렉토리에 폴더, symbolic link 생성 방법  (0) 2021.03.15
RSA 암복호화 테스트  (0) 2021.02.05
블로그 이미지

SKY STORY

,

20진수 변환

개발/Note 2021. 9. 16. 11:44
반응형

7세그먼트 LED는 아래와 같이 숫자 및 일부 영문자를 표시해 주는 디지털 표시 모듈이다.

7 세그먼트 LED

 

이 모듈에 숫자 이외에 출력 가능한 영문자는 다음과 같다.

A, b, C, d, E, F, H, L, P, U

이 모듈에 표현 가능한 최대 숫자는 10진수로 표현할 경우 0~9 10개의 

숫자(10진수)만 가능하지만 영문까지 사용할 경우 0~9, A~U

총 20개의 숫자/문자(20진수) 표현이 가능해 진다.

펌웨어 프로그래밍 작업을 하다보면 10진수와 20진수 변환해야

하는 경우가 생길 수 있는데 다음과 같이 변환하여 처리해 보았다.

 

// 20진수 문자열을 10진수 자료형 변수로 변환
/*
 좌측부터 10, .... 19
 A, b, C, d, E, F, H, L, P, U
 
 20진수 아스키코드 
 A:65(0x41)
 b:98(0x62)
 C:67(0x43)
 d:100(0x64)
 E:69(0x45)
 F:70(0x46)
 H:72(0x48)
 L:76(0x4C)
 P:80(0x50)
 U:85(0x55)
*/
unsigned long long convert20to10(char* str) {
    unsigned long long result = 0;
    unsigned long len = strlen(str);
    for (unsigned long i = 0; i < len; i++ ) {
        if ( str[i] >= 'A' && str[i] <= 'F' ) {         // A(65) ~ F(70)
            result = result * 20 + str[i] - 'A' + 10;
        } else if ( str[i] >= 'a' && str[i] <= 'f' ) {  // a(97) ~ f(102)
            result = result * 20 + str[i] - 'a' + 10;
        } else if ( str[i] >= '0' && str[i] <= '9' ) {  // 0(48) ~ 9(57)
            result = result * 20 + str[i] - '0';
        }
        else if (str[i] == 'H' || str[i] == 'h' ) { result = result * 20 + 16; }// H(72),h(104)
        else if (str[i] == 'L' || str[i] == 'l' ) { result = result * 20 + 17; }// L(76),l(108)
        else if (str[i] == 'P' || str[i] == 'p' ) { result = result * 20 + 18; }// P(80),p(112)
        else if (str[i] == 'U' || str[i] == 'u' ) { result = result * 20 + 19; }// U(85),u(117)
    }
    return result;
}


// 10진수 자료형 변수 값을 20진수 문자열로 변환
void convert10to20(unsigned long long decimal, char *result) {
    char szTemp[256] = {0,};
    unsigned long pos = 0;
    while(true) {
        unsigned long mod = decimal % 20;
        if (mod < 10) { // 0 ~ 9
            szTemp[pos] = 48 + mod;
        } else { //  A, b, C, d, E, F, H, L, P, U
            switch (mod) {
                case 10: szTemp[pos] = 'A'; break;
                case 11: szTemp[pos] = 'b'; break;
                case 12: szTemp[pos] = 'C'; break;
                case 13: szTemp[pos] = 'd'; break;
                case 14: szTemp[pos] = 'E'; break;
                case 15: szTemp[pos] = 'F'; break;
                case 16: szTemp[pos] = 'H'; break;
                case 17: szTemp[pos] = 'L'; break;
                case 18: szTemp[pos] = 'P'; break;
                case 19: szTemp[pos] = 'U'; break;
                default: break;
            }
        }
        decimal = decimal / 20;
        pos += 1;
        if (decimal == 0)
            break;
    }
    for (unsigned long i=0; i<pos; ++i) {
        result[i] = szTemp[pos-1-i];
    }
}

 

 

반응형

'개발 > Note' 카테고리의 다른 글

matplotlib 사용  (0) 2022.11.18
git 소스코드 비교  (0) 2022.02.23
root-level 디렉토리에 폴더, symbolic link 생성 방법  (0) 2021.03.15
RSA 암복호화 테스트  (0) 2021.02.05
RSA key 파일 생성  (0) 2021.02.05
블로그 이미지

SKY STORY

,
반응형

root-level 디렉토리이 기본적으로 생성되어있는 디렉토리는 다음과 같다.

/Applications, /Library, /System, /Users

이곳에 폴더 및 심볼릭링크 생성이 권한문제로 불가능하지만

다음 과정을 통해 생성 가능하다.

/etc 디렉토리에 synthetic.conf 파일 생성

sudo touch /etc/synthetic.conf

 

파일 권한 설정

sudo chmod 755 /etc/synthetic.conf

 

파일에 디렉토리 이름 선언

# 폴더 생성

MyFolder

# 심볼릭링크 폴더 생성

MySymbolicLinkFolder    /Volumes/DATA/MySymbolicLinkFolder

 

저장 후 재부팅

2021.02.22 - [COIN] - DogeCoin Mining

2021.02.08 - [Proxmark3] - Proxmark3 V5 개발환경 구축 (4/4)

2021.02.08 - [Proxmark3] - Proxmark3 V5 개발환경 구축 (3/4)

2021.02.08 - [Proxmark3] - Proxmark3 V5 개발환경 구축 (2/4)

2021.02.08 - [Proxmark3] - Proxmark3 V5 개발환경 구축 (1/4)

2021.02.08 - [Proxmark3] - Proxmark3 RFID Tool

2021.02.05 - [프로그래밍/Java] - RSA 암복호화 테스트

2021.02.05 - [프로그래밍/Java] - RSA key 파일 생성

2021.02.05 - [개발노트] - 용어 정리

반응형

'개발 > Note' 카테고리의 다른 글

git 소스코드 비교  (0) 2022.02.23
20진수 변환  (0) 2021.09.16
RSA 암복호화 테스트  (0) 2021.02.05
RSA key 파일 생성  (0) 2021.02.05
용어 정리  (0) 2021.02.05
블로그 이미지

SKY STORY

,
반응형

RSA 키생성 후 생성된 키로 암복호화 테스트 해 보았다.

package com.rsatest.rsaTest;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.nio.file.Files;
import java.security.InvalidKeyException;
import java.security.KeyFactory;
import java.security.NoSuchAlgorithmException;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.spec.DSAPrivateKeySpec;
import java.security.spec.DSAPublicKeySpec;
import java.security.spec.EncodedKeySpec;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;
import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.NoSuchPaddingException;
import org.apache.commons.codec.binary.Base64;


//
// RSA 암복호화 및 테스트
//
// Created by netcanis on 2019/04/29.
// Copyright © 2019 netcanis. All rights reserved.
//

public class RSAEncryption
{
	private Cipher cipher;
	
	public RSAEncryption() throws NoSuchAlgorithmException, NoSuchPaddingException{
		this.cipher = Cipher.getInstance("RSA");
	}
	
	// 주어진 파일을 byte array로 읽기 
	public byte[] getFileInBytes(File f) throws IOException{
		FileInputStream fis = new FileInputStream(f);
		byte[] fbytes = new byte[(int) f.length()];
		fis.read(fbytes);
		fis.close();
		return fbytes;
	}
		
	// X509EncodedKey
	public PublicKey getPublic(String filename) throws Exception {
		byte[] keyBytes = Files.readAllBytes(new File(filename).toPath());
		X509EncodedKeySpec spec = new X509EncodedKeySpec(keyBytes);
		KeyFactory kf = KeyFactory.getInstance("RSA");
		return kf.generatePublic(spec);
	}

	// PKCS8EncodedKeySpec
	public PrivateKey getPrivate(String filename) throws Exception {
		byte[] keyBytes = Files.readAllBytes(new File(filename).toPath());
		
		//byte[] decoded = Base64.getDecoder().decode(keyBytes);
		//println(new String(decoded));    // Outputs "Hello"
		
		//Base64 codec = new Base64();
		//byte[] decoded = codec.decode(keyBytes);
		//System.out.println( new String(decoded) );    // Outputs "Hello"
		
		PKCS8EncodedKeySpec spec = new PKCS8EncodedKeySpec(keyBytes);
		KeyFactory kf = KeyFactory.getInstance("RSA");
		return kf.generatePrivate(spec);
	}
	
	
	
	// PKCS1
//	public PrivateKey getPrivate2(String filename) throws Exception {
//		PEMParser pemParser = new PEMParser(new FileReader(privateKeyFile));
//		JcaPEMKeyConverter converter = new JcaPEMKeyConverter().setProvider("BC");
//		Object object = pemParser.readObject();
//		KeyPair kp = converter.getKeyPair((PEMKeyPair) object);
//		PrivateKey privateKey = kp.getPrivate();
//	}
	
	// public key로 암호화 
	public String encrypt(String str, PublicKey key) throws NoSuchAlgorithmException, NoSuchPaddingException, UnsupportedEncodingException, IllegalBlockSizeException, BadPaddingException, InvalidKeyException{
		this.cipher.init(Cipher.ENCRYPT_MODE, key);
		return Base64.encodeBase64String(cipher.doFinal(str.getBytes("UTF-8")));
	}
	
	// private key로 복호화 
	public String decrypt(String str, PrivateKey key) throws InvalidKeyException, UnsupportedEncodingException, IllegalBlockSizeException, BadPaddingException{
		this.cipher.init(Cipher.DECRYPT_MODE, key);
		return new String(cipher.doFinal(Base64.decodeBase64(str)), "UTF-8");
	}

	/*
	  String hexString = "01020304FF11";
      byte[] ByteArray = hexStringToByteArray(hexString);
      String str = byteArrayToHexString(ByteArray);
      System.out.println(str);
	 */
	
	// hex to byte[]
	public byte[] hexStringToByteArray(String s) {
	    int len = s.length();
	    byte[] data = new byte[len / 2];
	    for (int i = 0; i < len; i += 2) {
	        data[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4)
	                             + Character.digit(s.charAt(i+1), 16));
	    }
	    return data;
	}
	
	// byte[] to hex
	public String byteArrayToHexString(byte[] bytes){ 
		StringBuilder sb = new StringBuilder(); 
		for(byte b : bytes){ 
			sb.append(String.format("%02X", b&0xff)); 
		} 
		return sb.toString(); 
	} 
    
	
	public static void main(String[] args) throws Exception {
		RSAEncryption ac = new RSAEncryption();
		
		// 공개키
		PublicKey publicKey = ac.getPublic("KeyPair/public.key");
		// 개인키 
		PrivateKey privateKey = ac.getPrivate("KeyPair/private.key");
		
		// 원문 
		String msg = "test message";
		
		
		System.out.println("----------------------------------------------------");
		System.out.println(":::: TEST 암호화 및 복호화 ::::");
		
		// 암호화 원문 BASE64
		String encryptedString = ac.encrypt(msg, publicKey);
		// 복호화
		String decryptedString = ac.decrypt(encryptedString, privateKey);
		
		System.out.println("----------------------------------------------------");
		System.out.println(
    			"원문 = " + msg + "\n" +
				"공개키 암호화 = " + encryptedString + "\n" +
				"개인키 복호화 = " + decryptedString
				);
		System.out.println("----------------------------------------------------");

	}
}

 

사용방법 :

Encode or decode byte arrays:

byte[] encoded = Base64.getEncoder().encode("Hello".getBytes());
println(new String(encoded));   // Outputs "SGVsbG8="

byte[] decoded = Base64.getDecoder().decode(encoded);
println(new String(decoded))    // Outputs "Hello"
Or if you just want the strings:

String encoded = Base64.getEncoder().encodeToString("Hello".getBytes());
println(encoded);   // Outputs "SGVsbG8="

String decoded = new String(Base64.getDecoder().decode(encoded.getBytes()));
println(decoded)    // Outputs "Hello"


Base64 codec = new Base64();
byte[] encoded = codec.encode("Hello".getBytes());
println(new String(encoded));   // Outputs "SGVsbG8="

byte[] decoded = codec.decode(encoded);
println(new String(decoded))    // Outputs "Hello"


	

openssl rsa -text -in public.key -inform DER -pubin
-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCCH+bC/6rGV8I9NgqCUTpcUcUX
q15NC8N86kHtSPFl03dwwGIO3hPQVZyMiVwJYq8gz0ZFacf27tkvgphqJOAf/ckY
PKb52+8bEXNowbPhKqiwPaclEmtvm8MJplxZKa/Y+IhYitRRI7aVow841PRxC/nA
Z8AEiw5xkfBMsy9jdwIDAQAB
-----END PUBLIC KEY-----


openssl rsa -text -in private.key -inform DER
-----BEGIN RSA PRIVATE KEY-----
MIICXQIBAAKBgQCCH+bC/6rGV8I9NgqCUTpcUcUXq15NC8N86kHtSPFl03dwwGIO
3hPQVZyMiVwJYq8gz0ZFacf27tkvgphqJOAf/ckYPKb52+8bEXNowbPhKqiwPacl
Emtvm8MJplxZKa/Y+IhYitRRI7aVow841PRxC/nAZ8AEiw5xkfBMsy9jdwIDAQAB
AoGAGfdvvz3xwD7G/hwIoNTAxqdyozSJTuqoCgddPJKvyVgXn6Jkbv8WCR7sbIcE
nMLam7uBFFz1kGs9X+O5soTFTJHvyN1QyhvWODd2Gqqheh2fHqNunjegBJKnMVDS
ZCF+0HQe1SBub2D/WkPRMNb1O24v0FaR9LalaZAPqgM9eYECQQDpl+lSEddOsB7f
jX6QS9Z56s8St2Lql/HVlEsyZ3RZIHA+oGMuHaK124fo/CEQxH/SHouVCrjdgiR1
2rLbZY1hAkEAjps5Yw2SHb3AOUqG7x+FmVhb+DaMR+KZZpVlJvRxy4fQpoB2GdC4
Okf7idpQGZJHXeOI8sQbtS4GTFT7nwgH1wJBAKS2natlMTEnN13jZA9TqpSlYgaM
kY9iPQChZLTSBlSibwN6DPWDqCwb9KXww1ATfx4ms74QpXJsRlFkOSJDZYECQD4I
T6JC2PiO/frt7FxAPgFCal9CeysZ6tiwy9tyIb4DSkPjRXxdSoYvob+Jc6Zr9xdk
TsIrhFH/v0WdAgdfmukCQQCRnRh0nMw5GhjkP9pJTLZo4j8H/kp7lY0LDBLzo1cW
+nvyJ4Xg+Jgig5/lsn3QaIckocfnxcq10fGk+bFr67gM
-----END RSA PRIVATE KEY-----


UBpay RSA 암호화 결과 (위의 public key로 암호화)
원문 = test message
원문 HEXA = 74657374206D657373616765
암호화 원문 BASE64 = JLvhRkfskdQNcJ5mjMIy9hcCrfM1QDL5Qy/4tsnW8pG7QXvPrwmo7OxiTiC4FVBMw/Ae/NeLJCxY2jr9uRvKXFxqSrdrjBoO3QL+oFpKbldcvTRUzXCRsWzKzeM8v3FOclWgkZYZMzGq8PQQu3PgFKHCVMnX7//UE7aguHvLiJo=

반응형

'개발 > Note' 카테고리의 다른 글

20진수 변환  (0) 2021.09.16
root-level 디렉토리에 폴더, symbolic link 생성 방법  (0) 2021.03.15
RSA key 파일 생성  (0) 2021.02.05
용어 정리  (0) 2021.02.05
Korea Bank Codes  (0) 2021.02.05
블로그 이미지

SKY STORY

,