레이블이 etc인 게시물을 표시합니다. 모든 게시물 표시
레이블이 etc인 게시물을 표시합니다. 모든 게시물 표시

2016년 1월 2일 토요일

AdMob 가입기 와 Corona SDK에서 admob 사용기


admob은 모바일에서 광고를 하기 위한 플랫폼입니다.
Corona SDK에서 지원한다고 해서 가입해 보았습니다.



  • 아래 링크 접속해서 가입하기 버튼을 누릅니다.

https://www.google.co.kr/admob/




  • 구글 계정 로그인







  • adsense 계정이 있으면 편하게 가입이 되네요. 없으면 adsense계정 가입부터 해야 합니다.





  • 애드워즈 계정을 입력하고 시작하기 버튼을 눌러줍니다.




  • Admob에서 새광고 단위 만들기

광고 단위를 만들어야 어플에서 id를 이용해서 광고를 넣을 수 있습니다. 기본적을 따라하면 어렵지 않게 됩니다. 이미 등록된 어플을 선택할 수도 있고, 등록되지 않은 어플도 추가가 가능합니다. 여기에서는 등록되지 않은 어플 이름을 넣어서 id를 만들었습니다.






  • Corona SDK 에서 적용하기


기본적으로 아래 두개의 세팅을 넣어야 합니다.
https://docs.coronalabs.com/api/library/ads/index.html

Project Settings

To use this plugin, add an entry into the plugins table of build.settings. When added, the build server will integrate the plugin during the build phase.
settings =
{
    plugins =
    {
        ["plugin.google.play.services"] =
        {
            publisherId = "com.coronalabs"
        },
    },      
}

Android

For Android, the following permissions/features are automatically added when using this plugin:
    android =
    {
        usesPermissions =
        {
            "android.permission.INTERNET",
            "android.permission.ACCESS_NETWORK_STATE",
        },
    },


그리고는 아래 url에 참고로 작업해야 하는데요. 간단하면서도 내용이 복잡합니다.
주의할 점은 테스트가 시뮬레이터에서는 되지 않습니다. 따라서 지속적으로 단말에 apk를 올려서 테스트 해봐야 합니다. 가장 중요한점은 테스트시 광고가 Click 되지 않도록 주의합니다. (부정클릭 방지)

https://coronalabs.com/blog/2014/07/15/tutorial-implementing-admob-v2/

아래와같은 admob 에서 광고 단위를 생성하면 id라는게 나오는데요. 아래와 같은 형태가 됩니다. 이것을 Ad Unit ID 혹은 AppID라고 합니다.
ca-app-pub-28374982782348972983749273/4987234823
위 링크에서는 i OS 와 안드로이드를 두개 모두 설명한다고 코드가 복잡한데요.
코드에서 사용할때는 아래와 같이 하면 됩니다. 마지막 ads.show() 함수에 y 인자가 100000 인데 시작시점에 광고를 로딩해서 게임중에 느려짐을 방지하기 위함입니다. 그리고 필요한 곳에서 ads.hide()를 호출한뒤 원하는 위치에 ads.show()를 해주면 됩니다.
여기에서는 banner형태의 광고만 예를 들었습니다. show 함수에 인자를 banner를 넣어주면 됩니다. 그리고 ads.show("banner", {x=0, y=100000}) 이렇게 꼭 안해도 됩니다.
이것은 성능개선을 위한 제안일 뿐입니다.


local ads = require( "ads" )
local bannerAppID = "ca-app-pub-nnnnnnnnnnnnnnnn/nnnnnnnnnn"

local adProvider = "admob"
local function adListener( event )
    local msg = event.response
    -- Quick debug message regarding the response from the library
    print( "Message from the ads library: ", msg )

    if ( event.isError ) then
        print( "Error, no ad received", msg )
    else
        print( "Got one!" )
        adHeight = ads.height()
    end
end

ads.init( adProvider, bannerAppID, adListener )
ads.show("banner", {x=0, y=100000})

이건 위의 안보이는곳에 광고가 나와있으므로 지워주는 역할을 합니다.
ads.hide()
진짜 필요한곳에서 아래와 같은 코드를 수행합니다.
ads.show("banner", { x=0, y=0 })

그리고 광고의 위치는 x,y 값 조절로 변경이 가능하나 크기 정보 변경이 안됩니다.
게시글 리플에 보면 아래와 같이 조절하는것처럼 보이나 테스트해보면 반영되지는 않습니다. 그래서 모양이 어울리지 않기때문에 배치는 제일 위나 제일 아래 영역 통째로 광고 배너를 넣는것이 UI상 보기가 좋습니다.
Position and height-width set :
ads.show(“banner”, { x=100, y=display.contentHeight-30,width=display.contentWidth-200,height=40 })


또한 구글은 배너 광고 시점이 게임의 빠른 처리를 위한 플레이 동안에는 광고를 보여주지 않아야 한다고 강력하게 조언합니다. 무슨 말뜻인지는 알아서 새겨들으면 될 것 같습니다.
Google strongly advises that you do not show banners at times where your CPU time is at a premium, for example, during the main gameplay state of a fast-paced game.




2015년 6월 6일 토요일

읽어 두면 도움 되는 책

Game programming Gems 1
가끔 시간적 여유가 될때마다 꺼내 보는 책이다.
시리즈가 여러권 나왔는데 내가볼때 그래픽에 관심이 없다면 1권이 제일 좋다.
책이 깊이 있게 쓰여져 있지는 않지만, 뭔가 함축되어 있어 공부해야 하는 주제들을 알려준다.

당신이 게임 프로그래머가 아닐지라도 도움이 될것이다.

그 중에 기본이 되는 이야기를 하자면

- 기본 : data-driven 설계를 하라!

데이터를 쉽게 수정하여(text 파일을 이용) 프로그램을 고치지 않고 결과를 쉽게 볼 수 있는 방법을 마련하라는 말이다.
대표적으로 MFC 에서 view가 3개로 분리되어 있는 구조나 android에서 xml을 사용한다던지 등등 코드내에서 하드 코딩을 줄이라는 말이된다.
(MFC안한지 너무 오래 되었다. MSVC 6.0이 보고 싶네)


아이들이 좋아 하는 어플


무엇을 만들어 볼까 생각하다가

과연 아이들은 지금 무엇을 좋아 할까?



좋아하는 것들을 나열해 보았습니다.

1. 마인크래프트
2. 테라리아
3. 여러개 합쳐서 새로운걸 발견해내는 게임 alchemy
4. 무한의 계단
....



쉬우면서도 여러명이 할 수 있으면 좋고 무언가를 만들어낼(조합) 수 있는, 호기심을 자극하는 그런 게임이나 어플을 우리 아이들이 바라는것 같네요.



2015년 5월 29일 금요일

phonebooster 삭제방법 uninstall


최근에 어떤 사람이 악성앱을 설치해서 삭제하는 방법을 문의해와서 정리하였습니다

안드로이드단말에서 삭제를 못하게 하는 원리는 디바이스관리자로 등록하는 방법이 있습니다.

따라서 해당 어플들은 디바이스관리자 등록을 먼저 해제하고 삭제하면 됩니다.

하지만 phonebooster 라는 어플은 디바이스관리자 등록을 해제하려고 하면 자꾸 해제가 안되는 증상이 있었습니다.

따라서 정리해보았습니다.

1. 안전 모드로 부팅 (안드로이드 단말들은 안전모드 부팅방법이 있습니다.)
부팅시 메뉴키 연타를 계속합니다. 또는 부팅시 볼륨하키를 누르고 있으면 됩니다.
(진입방법은 모델마다 다릅니다. 단말기 고객센터에 문의하면 됩니다. 또는 인터넷에 검색해보시기 바랍니다.)
좌측 하단에 안전모드라고 뜨게 됩니다.
삭제하려고 하면 disable 되어있어 삭제를 할수가 없습니다



2. 설정 > 보안 > 디바이스 관리자 진입
악성 앱에서 Android Settings 이라는 이름으로 등록을 해놓았습니다.
Settings는 기본적으로 디바이스 관리자에 포함되어 있지 않습니다.






3. Android Settings에서 check box해제



4. 다시 삭제시도














2015년 5월 1일 금요일

영어 파싱 ?



일반적으로 (1+2)*6 = ? 의 값을 계산하려면 계산기 parser를 설계해야 한다고 많이들 알고 있다.
만약 당신이 자비스나 아수라다 같은 인공지능 기기를 만든다고 생각하면 무었이 필요한가 생각해 본적이 있는가?
첫번째 필요한것은 음성을 인식 하는것일 것이다. 
"음성을 인식한다" 너무 범위가 넓다. "1+3*6 계산해라" 라는 말을 하면 인공 지능이 입장에서는 어떻게 해야할까?
일단 생각해 볼 수 있는것이 단어의 인식이 먼저일 것이다. 
사람 목소리에 대한 "일 더하기 삼 곱하기 육" 하나하나 낱말로 할것인지 발음 하나 하나로 할것인지 결정하면, 패턴 인식이나 신경망으로 구현하면 할 수 있을것 같다.

그런 다음 단어의 배열만 가지고 어떤 동작을 해야하는지 알기 힘들기 때문에 언어 파서가 필요한것이다. 
그래서 영어로된 파서가 있는지 검색해보니 Link Grammar http://www.link.cs.cmu.edu/link/ 이곳에서 훌륭하게 소스도 공개해주고 있었다.
링크를 타고 들어가면 http://www.abisource.com/projects/link-grammar/ 여기가 나오는데
용도는 워드프로세서의 맞춤법 검사용인것 같다.
좀 더 링크를 타고들어가면 http://wiki.opencog.org/w/OpenCog 도 볼 수 있다.
인식에 대한 open source 커뮤니티 인것으로 추측된다.

자 다시 돌아와서 아래 링크에 영어 문장을 넣으면 문장 분석을 해준다.
http://www.link.cs.cmu.edu/link/submit-sentence-4.html

  • You can click on a link label to see the definition of that link type. 이런 문장을 넣어보았다.
아래는 분석된 결과이다.

++++Time                                          0.01 seconds (189.71 total)
Found 3 linkages (3 with no P.P. violations)
  Linkage 1, cost vector = (UNUSED=0 DIS=2 AND=0 LEN=26)

    +----------------------------------------------Xp------------------------
    |                  +-----------MVi-----------+                           
    |                  |     +------Js-----+     |                         +-
    |                  |     | +-----Ds----+     |   +------Os-----+       | 
    +--Wd--+-Sp-+---I--+-MVp-+ |    +--AN--+     +-I-+    +---D*u--+---Mp--+ 
    |      |    |      |     | |    |      |     |   |    |        |       | 
LEFT-WALL you can.v click.v on a link.n label.n to see.v the definition.n of 


---------------------+
                     |
-------Js--------+   |
   +-----Dsu-----+   |
   |      +--AN--+   |
   |      |      |   |
that.d link.n type.n . 

Constituent tree:

(S (NP You)
   (VP can
       (VP click
           (PP on
               (NP a link label))
           (S (VP to
                  (VP see
                      (NP (NP the definition)
                          (PP of
                              (NP that link type))))))))
   .)

생각해보건데 영어 공부용으로도 구현이 가능하리라 생각된다.
문장 형식이 몇형식인지 고민할 필요없이 아래 tree구조만 보면 해석이 쉬워지는듯 하다.

간단하게 설명하자면 VP 동사구, NP 명사구 PP 전치사 구

GPL 라이센스를 가지고 있으며 소스는 모두 C/C++언어로 되어있다.

그리고 배경이 되는 논문은 여기에 있다.
http://www.link.cs.cmu.edu/link/ftp-site/link-grammar/LG-IWPT93.pdf

대충 봤을때는 link grammer라는 의미는 D- D+는 붙을 수 있고 S- S+ 와 붙는 다는 의미로 이해하면 될 듯 하다.
a the : D-
snake cat : D- & (O- or S+)
Mary : O- or S+
ran : S-
chased : S- & O+

2015년 1월 18일 일요일

stack & heap in multithreading ( 멀티 스레딩에서 스택과 힙 )


단일 Process 에서의 스택과 힙 

일반적으로 스택과 힙이라고 한다면 아래와 같은 그림을 많이 봤을것입니다.



출처:https://sites.google.com/site/wdhamilttutorials/c/q2/stack_vs_heap

stack은 위에서 아래로 자라고 heap은 아래에서 위로 자란다고 알고 있습니다.

그리고 이 사실을 10년 넘게 멀티스레딩 환경에서는 어떨까라는 고민을 안해 왔습니다. Process가 독립적인 주소공간을 가지는 Process에서는 관계없지만 동일 주소 공간을 지니는 thread에서는 여러개의 thread가 각각 stack을 가져야 하는데 그러면 어떻게 될까요?




멀티스레딩 환경에서의 스택과 힙

기억나는지 모르겠지만 thread를 생성할때 stack크기를 지정했었던게 기억에 납니다.
무심코 스택크기만 적었지만 왜 heap크기는 정하지 않았던걸까요? 정답은 바로 가까이 있었습니다.
힙은 공유하고 스택은 따로 관리하고 있습니다.

적절한 이미지를 찾았습니다.
출처:http://www.mono-project.com/docs/advanced/garbage-collector/sgen/




2014년 12월 15일 월요일

build시 출력과 동시에 파일로 저장하기


linux에서 build시 화면 로그를 파일로 저장하는방법

막상 쓸려고 하면 기억이 잘안남 ㅜㅜ

찾았으니 유용하게 사용 바랍니다.

bash shell :
 ./build.sh &> error.log

c shell & bash shell :
 ./build.sh |& tee error.log

bash shell을 사용하고 있는데 c shell게 잘 동작함 bash꺼는 동작 안함. 참고 바랍니다.

IMEI 끝자리 생성(check sum) 사용자 엑셀(vba) 함수


사용법
=IMEICALC(셀위치)

A5 내용 : 12345678901234 <- 14자리여야한다.
=IMEICALC(A5)
마지막 자리에 chcksum이 붙어서 나타난다.


Function IMEICALC(str As String) As Variant
Dim imei As Variant
Dim sum As Variant
Dim strlen As Integer

ReDim imei(1 To 14) As Integer

strlen = Len(str)
If strlen <> 14 Then
    IMEICALC = "ERROR"
    Return
End If

For i = 1 To 14 Step 1
    imei(i) = Mid(str, i, 1)
Next i


For i = 2 To 14 Step 2
    imei(i) = imei(i) * 2
    If imei(i) >= 10 Then
        imei(i) = imei(i) - 10 + 1
    End If
Next i

sum = 0
For i = 1 To 14 Step 1
    sum = sum + imei(i)
Next i

IMEICALC = sum Mod 10
IMEICALC = 10 - IMEICALC
If IMEICALC = 10 Then
    IMEICALC = 0
End If

IMEICALC = str & IMEICALC
End Function









2014년 12월 14일 일요일

GREP 필수 사용법 정리 & Windows GREP

GREP은 텍스트 검색 기능을 가진 명령어이다. linux나 Unix에서는 기본으로 있는 명령어이지만 windows에서는 별도로 설치해야만 사용이 가능하다.

많은 소스를 가지고 소스내에서 검색하는 기능을 가진 프로그램으로는 source insight가 있으며, opengrok을 설치해서도 소스 검색이 가능하지만 해당 프로그램을 설치하는것은 무거운 상황이 될 수 있다. 따라서 프로그래머라면 기본적으로 grep의 기본 명령어 정도는 알고 있으면 편하다.

  • Windows 에서 GREP 설치

http://www.wingrep.com/ 여기껀 별로다. 설치하지 말자. 기본적으로 window창으로 동작한다.
http://gnuwin32.sourceforge.net/packages/grep.htm 여기 것을 설치 하도록 합니다.
설치 link는 아래보면 Requirements 에 있는 Setup program 링크를 눌러서 설치하도록 합니다. ( download 링크쪽은 일부 dll이 포함이 안되어있어 설정해주기가 귀찮습니다.)

RequirementsRequirements for running applications, excluding external ones such as msvcrt.dll, perl, etc, are included in the Setup program and the dependencies zip file.
  • Win32, i.e. MS-Windows 95 / 98 / ME / NT / 2000 / XP / 2003 / Vista / 2008 with msvcrt.dll and msvcp60.dll. If msvcrt.dll or msvcp60.dll is not in your Windows/System folder, get them from Microsoft, or (msvcrt.dll only) by installing Internet Explorer 4.0 or higher.

Setup program << Windows에서 GREP 사용하려면 여기 링크 사용하세요

  • PATH 등록하기

어디에서나 grep 명령을 치면 동작해야 하므로
C:\Program Files (x86)\GnuWin32\bin (64 bit 환경)또는 C:\Program Files\GnuWin32\bin (32bit 환경)경로를 PATH에 추가해 주도록 합니다.
둘중에 어떤 경로인지는 설치할때 자신이 설정한 경로가 됩니다.

제어판->시스템 보안 -> 시스템 -> 고급 시스템 설정 -> 환경 변수 -> 시스템 변수(Path항목 선택) -> 편집 -> 마지막에 ";C:\Program Files (x86)\GnuWin32\bin" 추가
각각의 항목은 ; (세미 콜론)으로 구분 됩니다.


  • 기본 사용법

사용법: grep [옵션]... 패턴 [파일]...


  • 현재 폴더 내에서 있는 모든 파일(예:*)에서 원하는 문자열(예:init) 찾기

grep init *

D:\download\encog-examples-3.2.0-release\encog-examples-3.2.0>grep init *
grep: .settings: Is a directory
grep: apidocs: Is a directory
build.xml:  <target name="init">
build.xml:  <target name="compile" depends="init"
grep: lib: Is a directory
grep: src: Is a directory

  • GREP 하위 모든 폴더 내에서 특정 문자열(예:init) 있는지 검색하기

grep -r init *  


  • GREP 하위 모든 폴더 내에서 특정 파일에서 특정 문자열 있는지 검색하기

grep -r init *.xml  (하위폴더 xml 파일에서 검색)

D:\download\encog-examples-3.2.0-release\encog-examples-3.2.0>grep -r init *.xml

build.xml:  <target name="init">
build.xml:  <target name="compile" depends="init"


  • GREP 하위 모든 폴더 내에서 특정 파일에서 특정 문자열(단어) 있는지 검색하기
grep -r -w ini *.xml (-w 사용)

D:\download\encog-examples-3.2.0-release\encog-examples-3.2.0>grep -r ini *.xml
build.xml:  <target name="init">
build.xml:  <target name="compile" depends="init"

D:\download\encog-examples-3.2.0-release\encog-examples-3.2.0>grep -r -w ini *.x
ml

D:\download\encog-examples-3.2.0-release\encog-examples-3.2.0>grep -r -w init *.
xml
build.xml:  <target name="init">
build.xml:  <target name="compile" depends="init"

2014년 12월 7일 일요일

폭발 장면 만들기 Detonation 소개


HDD를 정리하다 보니 굉장히 오래되고 유용한 SW일 것 같아서 소개합니다.
http://hp.vector.co.jp/authors/VA018980/ 여기에서 software항목을 선택하면 됩니다.
폭발 장면외에도 다양한 효과를 만들 수 있지만 일본어만 지원을해 무슨 말인지 알아 듣지는 못하지만 들어있는 sample을 조그만 변형해서 새로운 효과를 낼 수 있습니다

생성 후에는 BMP로 저장 가능 하다. 게임 제작시 폭발장면이 필요할때 사용하면 좋다.


2014년 12월 4일 목요일

(함수 사용하지 않고) SQRT 제곱근 구하기

갑자기 우리가 아무 생각 없이 사용하는 sqrt() 함수를 컴퓨터 언어로 어떻게 구할까 궁금해 졌다.

sqrt함수가 어떤 함수인지는 그래프를 살펴보자

http://mathworld.wolfram.com/SquareRoot.html

그림으로 그리자면 실수부는 아래 그림과 같다.
SqrtReal


없으면 구현한번 해볼려고 했었는데, 계산 하는 방법이 정말 많았다. 굳이 할필요가 없을것 같다.

http://www.codeproject.com/Articles/69941/Best-Square-Root-Method-Algorithm-Function-Precisi

2014년 11월 27일 목요일

RSA 공격(1)


앞에서 RSA 공격에 대한 내용이 있었다.
이것을 어떻게 하면 될지 간단하게 코드로 만들어 보았다.

  • RSA에 대한 공격

‡(1) 수 D를 알면 암호문을 복호화 할 수 있다. 

그렇기 때문에 RSA에 대한 공격 방법으로서, D의 후보가 되는 수를 순서대로 시도해서 복호화한다는 전사공격을 생각할 수 있다. 
전사공격은 D의 비트 수가 크면 클수록 시도해보아야 할 수도 많아지고 계산도 복잡해지므로 점점 더 시간이 걸리며 어려워진다. 
따라서 비트 수가 충분히 크면 전사공격으로 수 D를 찾아내는 것은 현실적으로는 불가능해진다. 

  • 수 D를 알면 암호문을 복호화 할 수 있다. Java RSA 공격 예제
이 예제는 암호문과 평문을 N을 알때 D를 구하는 방법이다. 일반적으로 공개키를 가지고 있다는 것은 평문을 암호문으로 바꿀 수 있다는 것을 의미한다.


import java.math.BigInteger;

public class calc {
 private static int mD = 0;
 private static int mN = 0;
 private static int mL = 0;
 private static int mE = 0;
 private static int mEncData[];
 private static int mPlainData[];

 public static void main(String[] args) {
  int plainText[] = {123,100,80};
  processRSA(17,19,plainText);
  attackRSA_case_All(mEncData,mN,plainText);
 }

 private static void processRSA(int p,int q,int PlainText[]) {
  int N = p*q;
  int L = GcdNLcm.lcm(p-1,q-1);
  int findE = -1,findD = -1;
  int i;
  mEncData = new int [PlainText.length];
  System.out.println("(1)N:"+N);
  System.out.println("(2)L:"+L);
  /////////////////////////////
  System.out.println("(3)find E");

  for(i=2;i<L;i++){
   if(GcdNLcm.gcd(i,L)==1){
    System.out.printf("%d ",i);
    if(findE == -1 || Math.random()>0.95){
     findE = i;
    }
   }
  }
  System.out.println("...");
  System.out.println("findE:"+findE);
  /////////////////////////////  
  System.out.println("(4)find D");
  for(i=1;i<L;i++){
   if((findE*i)%L ==1){
    System.out.printf("%d ",i);
    if(findD == -1 || Math.random()>0.8){
     findD = i;
    }
   }
  }
  System.out.println("...");
  System.out.println("findD:"+findD);
  /////////////////////////////
  for(i=0;i<PlainText.length;i++){
   System.out.println("(5)encrypt");
   BigInteger bigPlainText;
   bigPlainText = BigInteger.valueOf(PlainText[i]);

   BigInteger bigEncData = bigPlainText.pow(findE).mod(BigInteger.valueOf(N));
   System.out.println(PlainText[i]+"^"+findE+" mod "+N+"=" + bigEncData.toString());
   /////////////////////////////
   System.out.println("(6)decrypt");
   decRSA(N, findD, bigEncData);
   mEncData[i] = bigEncData.intValue();
  }
  /////////////////////////////
  mD = findD;
  mN = N;
  mL = L;
  mE = findE;
  mPlainData = PlainText;
 }

 private static void decRSA(int N, int findD, BigInteger bigEncData) {
  BigInteger bigDecData = bigEncData.pow(findD).mod(BigInteger.valueOf(N));
  System.out.println(bigEncData.toString()+"^"+findD+" mod "+N+"=" + bigDecData.toString());
 }

 private static int attackRSA_case_All(int encData[],int N,int plainText[]) {
  // 평문 = 암호문^D mod N
  // D=?
  int i;
  System.out.println("********attackRSA_case_All");
  for(i=0;i<plainText.length;i++){
   System.out.println("********find D*******");
   int findD = attackFindD(encData[i], N, plainText[i], 10000, 5);
   System.out.println("********recheck*******");
  }
  return -1;
 }

 private static int attackFindD(int encData, int N, int plainText,int loop, int count) {
  BigInteger bigDecData = BigInteger.valueOf(encData);
  for(int i=0;i<loop;i++){
   if( bigDecData.pow(i).mod(BigInteger.valueOf(N)).intValue() == plainText ){
    System.out.println("Found D:"+i);
    count--;
    if(count <= 0) return i;
   }
  }
  return -1;
 }

 public static class GcdNLcm
 {
  public static int gcd(int left, int right)
  {
   if(left == 0 || right == 0)
    return 0;
   int high = left;
   int low = right;
   if(high < low)
   {
    int temp;
    temp = high;
    high = low;
    low = temp;
   }
   int remain;
   do
   {
    remain = high % low;
    high = low;
    low = remain;
   }
   while(remain != 0);
   return high;
  }
  public static int lcm(int left, int right)
  {
   int gcd = gcd(left,right);
   if(gcd == 0)
    return 0;
   return left * right / gcd;
  }
 }
}

결과는 아래와 같다.
의미하는 바는 D값을 구해내더라도 여러개의 암호문->평문으로 할 수 있는 공통의 D값찾아내야 한다는 것이다.

(1)N:323
(2)L:144
(3)find E
5 7 11 13 17 19 23 25 29 31 35 37 41 43 47 49 53 55 59 61 65 67 71 73 77 79 83 85 89 91 95 97 101 103 107 109 113 115 119 121 125 127 131 133 137 139 143 ...
findE:5
(4)find D
29 ...
findD:29
(5)encrypt
123^5 mod 323=225
(6)decrypt
225^29 mod 323=123
(5)encrypt
100^5 mod 323=104
(6)decrypt
104^29 mod 323=100
(5)encrypt
80^5 mod 323=207
(6)decrypt
207^29 mod 323=80
********attackRSA_case_All
********find D*******
Found D:29
Found D:65
Found D:101
Found D:137
Found D:173
********recheck*******
********find D*******
Found D:29
Found D:101
Found D:173
Found D:245
Found D:317
********recheck*******
********find D*******
Found D:29
Found D:173
Found D:317
Found D:461
Found D:605
********recheck*******




2014년 11월 23일 일요일

ideone 소개

코드를 컴파일 해볼 수 있는 곳
java, c, c++ 등등 많은 언어가 빌드 가능하고, 간단하게 코드를 올려서 빌드해 볼 수 있습니다.
http://ideone.com/