본 자료는 PHP용 암호화 및 복호화가 가능한 라이블러리를 소개합니다.

 

이 자료를 이용하여 제가 직접 C#과 Oracle용으로 마이그레이션한 라이블러리를 공개합니다.

 

(ADODB가 GNU 라이센스이므로 공유는 당연하다 판단했습니다.)

 

출처 : http://adodb.org/

 

- 암호화 : MD5Crypt.Encrypt(문자열, 키값) //호출 할 때마다 다른 값이 리턴됨

- 복호화 : MD5Crypt.Decrypt(암호 문자열, 키값)

 

암호화 문자열과 키값은 반드시 키보드에 존재하는 영문+숫자+특수키 값만을 정상적으로 사용 가능하며,

 

기타 다른 문자(특수문자, 한글, )들은 문자 인코딩 타입과 플랫폼에 따라 상이한 결과가 나오므로 주의가 필요함.

 

 

 

[CODE]

//ADOdb의 crypt.inc.php
//Session Encryption by Ari Kuorikoski 
class MD5Crypt{
  function keyED($txt,$encrypt_key)
  {
    $encrypt_key = md5($encrypt_key);
    $ctr=0;
    $tmp = "";
    for ($i=0;$ikeyED($tmp,$key));
  }

  function Decrypt($txt,$key)
  {
    $txt = $this->keyED(base64_decode($txt),$key);
    $tmp = "";
    for ($i=0;$i= 58 && $randnumber <= 64) || ($randnumber >= 91 && $randnumber <= 96))
      {
        $randnumber = rand(48,120);
      }

      $randomPassword .= chr($randnumber);
    }
    return $randomPassword;
  }

}

 

 

 

 

 


[PHP / Crypt / MD5Crypt]암호화, 복호화 Class (ADOdb의 crypt.inc.php

http://userpark.net/124


[C# / .NET / Crypt / HxCrypt]암호화, 복호화 Class

http://userpark.net/125


[ORACLE / PL/SQL / Crypt / HxCrypt]암호화, 복호화 PACKAGE(Class)

http://userpark.net/126

 

추후 Javascript 버전도 고려중니다만, 변경 하시면 공유 부탁드립니다. ^^


Windows 플랫폼에서 alert 객체가 지원되지 않아서 Ionic Popup객체로 대체...


var alert = window.alert;


angular.module('myApp', ['ionic'])

.controller('myCtrl', function ($scope, $state, $timeout,$ionicPopup) {
    alert = function (messageText, titleText) {
        if (!titleText || titleText == "undefined") {
            titleText = "";
        }
        var alertPopup = $ionicPopup.alert({
            title: titleText,
            template: messageText
        });
        alertPopup.then(function (res) { });
    };

});



출처 : 자작(userpark.net)


출처 : https://github.com/driftyco/ionic/issues/2885



window.addEventListener('click', function(event) {
  if (Object.prototype.toString.call(event) == '[object PointerEvent]') {
    event.stopPropagation();
  }
}
, true);


또는


ionic.Platform.isIE = function () {
    return ionic.Platform.ua.toLowerCase().indexOf('trident') > -1;
}

if (ionic.Platform.isIE()) {
    angular.module('ionic')
      .factory('$ionicNgClick', ['$parse', '$timeout', function ($parse, $timeout) {
          return function (scope, element, clickExpr) {
              var clickHandler = angular.isFunction(clickExpr) ? clickExpr : $parse(clickExpr);

              element.on('click', function (event) {
                  scope.$apply(function () {
                      if (scope.clicktimer) return; // Second call
                      clickHandler(scope, { $event: (event) });
                      scope.clicktimer = $timeout(function () { delete scope.clicktimer; }, 1, false);
                  });
              });

              // Hack for iOS Safari's benefit. It goes searching for onclick handlers and is liable to click
              // something else nearby.
              element.onclick = function (event) { };
          };
      }]);
}


'Language > Mobile' 카테고리의 다른 글

[Hybrid/Ionic]Windows Platform에서 alert 객체 대체  (1) 2016.11.04

 

상기 Libary를 이용하면 Json을 이용한 컨트롤이 Javascript에서 손쉽게 이루어 질 수 있을 것으로 판단한다.

  1. XML 파일 또는 포멧의 자료를 “XML to JSON – a converter”를 이용하여 JSON으로 변경
  2. “Sesseion variables without cookies”를 이용하여 해당 페이지에 저장(새로고침을 하여도 해당 창이 닫히기 전까지는 유지되는 기능 활용)
  3. “JSON Query Engine”을 이용하여 CRUD(Create, Read, Update, Delete) 작업 수행 및 반영

본 소스가 왜 필요하고 어떻게 구현되는지는 소스 보면 쉽게 이해가 가실것으로 판단하여 설명은 달지 않겠습니다.

호출 페이지(HTML)

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8" />
        <title></title>
        <script type="text/javascript" src="jquery-1.7.1.min.js"></script>
        <script type="text/javascript">
            $(document).ready(function ()
            {
                loadData();
            });
            function loadData()
            {
                try
                {
                    $.ajax({
                        url: "http://[테스트 도메인]/json_test.php"
                        , crossdomain: true
                        , dataType: "jsonp"
                        , jsonp: "callback"
                        , jsonpCallback: "jsonpCallback"
                        , type: 'GET'
                        , data: post
                        , contentType: "application/json; charset=utf-8"
                        , error: function (jqXHR, textStatus, errorThrown)
                        {
                            alert("Error : " + textStatus + " / " + errorThrown);
                        }
                        , success: function (msg, textStatus, jqXHR)
                        {
                            // Callback함수 이용 추천
                            $("#txtResult").text(JSON.stringify(msg));
                        }
                    });
                } catch (e) {
                    alert("Error!!");
                }
            }
            function jsonpCallback(msg)
            {
                //var data = eval(msg);
                alert(msg["callback"] + " / " + JSON.stringify(msg));
            }
        </script>
    </head>
    <body>
        <div id="txtResult" name="txtResult">
        Result Text String
        </div>
    </body>
</html>


피호출 페이지(PHP / json_test.php)

<?php
header("content-type: application/json");  
$callback = $_GET["callback"];

$json_data = array();
$json_data["get"] = $_GET;
$json_data["data"]["a"] = "A";
$json_data["data"]["b"] = "B";
$json_data["data"]["c"] = "C";
$json_data["data"]["d"] = "D";
$json_data["data"]["e"] = "E";

echo $callback . "(". json_encode($json_data) . ")";
?>

결과

{"get":{"callback":"jsonpCallback","_":"1385021410367"},"data":{"a":"A","b":"B","c":"C","d":"D","e":"E"}}

 


주의사항

JSON.stringify 함수는 IE8 부터 지원되며, 브라우져 버전이 IE8이더라도 문서 모드가 “Internet Explorer 8 표준”이상에서만 정상 작동하며, “Internet Explorer 8 호환모드”또는 Internet Explorer 7” 이하에서는 작동되지 않습니다.
크롬 등에서는 정상 작동합니다. 문제는 “Internet Explorer” ^^;;
 

참고 : http://www.fbloggs.com/2010/07/09/how-to-access-cross-domain-data-with-ajax-using-jsonp-jquery-and-php/

JQuery Ajax API Document : http://api.jquery.com/jQuery.Ajax/

 

*.lin을 이용하여 Line Type을 만들 수있으나, Multi Line은 해결책을 찾지 못하여 엄청난 고생을 하였다.

그에 따라 다음에 까먹을 까봐 이렇게 메뉴얼화 해놓으며, 다른 사용자 분들도 필요하면 사용하여 보기시 바랍니다.

Plant에서 Tracing Line을 그릴려고 하는데 기본 AutoCAD P&ID의 Line Type에서는 Tracing Line Type을 지원해 주지 않습니다.

그러면 추가하는 법을 아래에 서술하오니 참고하시기 바랍니다.

기술지원을 해준 투아이티씨솔루션(http://www.iitcsolution.com)의 김도겸씨에게 감사의 인사를 전합니다.

이만 ~

 

  1. AutoCAD P&ID 실행
  2. AutoCAD P&ID의 일반 도면 “Open”을 이용
     
  3. Open Dialog Box에서 반드시 추가(수정)할 Project 폴더로 이동하여 “projSymbolStyle.dwg” Open

  4. Command창에 “MLSTYLE” 명령 입력

  5. “Multiline Style”창에서 [New…] 실행

  6. “New Style Name”에 적당한 사용자 정의 명칭 부여 후 [Continue]

  7. “New Multiline Style : ???????”
    1. “Description” : 적당한 설명 문구 입력
    2. “Elements”의 라인 (기복적으로 두개)들의 설정값을 [Linetype]과 기타 설정 기능들을 활용 하여 변경
    3. 설정 반영 : [OK]
       
  8. “projSymbolStyle.dwg” [저장(save)]
  9. 해당 프로젝트 Open후 프로젝트명에서 Popup호출 후 “Properties” 실행(프로젝트 설정)

  10. “Project Setup”에서 “P&ID DWG Settings > P&ID Class Definitions > Engineering Items > Lines > Pipe Line Segments”로 이동 후 Popup Menu 호출 하여 [New] 실행
     
  11. “Create Class” Dialog Box를 이용한 설정
    1. “Class Name” : 유일한 값이어야 하며, 시스템에서만 인식되는 고유한 키값, 스페이스(띄어쓰기)와 특수문자를 제외한 값을 입력
    2. “Display Name of the Class” : 사용자가 알아보기 위한 값이며, 외부로 표시되는 이름
    3. [OK]

  12. 우측의 “Class settings : ~~~~”항목에서 “Line"의 [Edit Line…] 실행

  13. “Line Settings” Dialog Box를 이용한 설정
    1. “Show flow arrows” : 화살표 표시 여부(Pipe Line의 Flow(유체) 방향) (Default : No)
      => Yes
    2. “Flow arrow style” : 화살표 표시할 스타일 (Default : Flow Arrow Style)
    3. “Layer” : 도면 레이어 계층 설정 (Default : --- Use Current ---)
      =>”Process”로 지정하였으며, 알아서 레이어를 선택하시기 바랍니다.
    4. “Color” : 도면에 표시할 색상(Defalt : ByLayer)
      => “Blue”, 알아서 지정
    5. “Sline type: 도면에 표시할 Line Type (Default : Polyline)
      => “Mline”을 선택
    6. “Linetype” : (Default : Continuous)
      => 사용자가 작성한 스타일 선택
    7. “Line weight” : 라인 굵기 (Default : --- Use Current ---)
    8. “Tagging prompt: 라인 도면에 추가 시 자동 태킹 할지 선택(Default : Not a tagged component)
    9. “Gap priority” : Gap 값 설정, 0일 경우 추가 안됨… 0이상 입력(Default : 0)


  14. “Add to Tool Palette…”를 이용하여 팟레트에 추가
  15. “Project Setup”의 [Apply]와 [OK]를 눌러 설정 마무리
  16. Tracing Pipe Line Segment를 이용하여 확인

  17. 원하는 간격 또는 모양이 아닌 경우 “projSymbolStyle.dwg”에서 “MLSTYLE”을 이용하여 수정 후 저장하여 사용
    기존 MLType이 변경된 경우 해당 도면에서 “SYNCHSTYLES”을 이력하면 되나… 기존 스타일은 유지되고 새로 추가됨… 혹여나 잠재적인 버그가 있지 않을까 우려는 됨


 

출처 : 자작(userpark.net)

AutoCAD P&ID Loading을 빠르게…

대부분 별다른 방법은 없으며, 일단 빠르게 실행하기 위한 방법을 찾은 결과 현재는 두 가지 항목이나 추후 추가되는 내용 있으면 추가하겠습니다.

  • Q : Autodesk AutoCAD P&ID or Plant 3D를 실행하는데 초기 로딩이 상당히 느립니다.
    • A : 이점은 .NET으로 개발된 모든 응용프로그램에 해당 되며, 최초 로딩 한번은 느리나 그 다음 로딩은 빨라집니다.
      초기로딩 늦음에 대한 해결 방법이 따로 없으며, SSD 장착 하시기 바랍니다.(신세계를 경험하실 겁니다 ^^)

 

  • Q : AutoCAD P&ID or Plant3D의 프로젝트 Database를 Microsoft SQL Server로 이용 중인데 프로그램 로딩이 한 참을 멈추어져 있습니다.
    • A : 이 부분은 SQLite를 쓸 때는 없었던 문제이나, Microsoft SQL Server를 이용한 프로젝트를 마지막에 사용 후 재 가동 하였을 때 나타나는 버그로 보입니다.
      해결 방법은 AutoCAD P&ID 시작 전 “PnPLocalDataCachPurger.exe”를 실행 하여 주시기 바랍니다.
    • A : 배치파일(.BAT)을 생성하여 항상 시작 시 “PnPLocalDataCachPurger.exe”를 실행하는 파일을 생성 하십시요.
      Microsoft SQL Server든, SQLite를 이용하시던 무조건 아래 파일로 실행하시면 되겠습니다.
      MSSQL은 초기 실행 관련 딜레이 오류 해결과, SQLite사용시 외부에서 속성 변경 시 반영 안 되는 문제 두 가지 모두 해결 가능합니다.
      예) AutoCAD P&ID 2013기준(64bit, 32bit 환경에 따라 알아서 설정하시기 바라며, Window 64bit에 AutoCAD 32bit를 설정한 경우 빼고 OS와 AutoCAD 32, 64bit가 같으면 그대로 이용하시면 됩니다)

"C:\Program Files\Autodesk\AutoCAD P&ID 2013 - English\PnPLocalDataCachePurger.exe"
Pause
"C:\Program Files\Autodesk\AutoCAD P&ID 2013 - English\acad.exe"
exit

 

출처 : 자작(userpark.net)

 


참고 :

2012/09/26 - [S/W/Autodesk AutoCAD(s)] - [AutoCAD P&ID]Autodesk AutoCAD P&ID와 함께 배포되는 지원 프로그램 소개



Visual Studio에서 빌드(Build) 또는 디버그(Debug) 시에 발행하는 경고 오류가 하기와 같은 형식으로 발생할 경우 해결 방법

※ 경고라서 특별히 프로그램 실행하는데 문제는 안되나… 꺼림직해서…

경고    1    포함된 interop 어셈블리 'c:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\PublicAssemblies\EnvDTE.dll'에 대한 참조는 ‘~~~~~~~~~~~~~.dll' 어셈블리가 해당 어셈블리에 대해 만든 간접 참조로 인해 만들어졌습니다. 두 어셈블리 중 하나에서 'Interop 형식 포함' 속성을 변경하십시오.   ~~~~

경고    2    포함된 interop 어셈블리 'c:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\PublicAssemblies\EnvDTE80.dll'에 대한 참조는 ‘~~~~~~~~~~~~~.dll' 어셈블리가 해당 어셈블리에 대해 만든 간접 참조로 인해 만들어졌습니다. 두 어셈블리 중 하나에서 'Interop 형식 포함' 속성을 변경하십시오.    ~~~~~

상기 오류 발생한 경우 프로젝트 참조에서 해당 참조를 선택하여 “Interop 형식 포함(Embed Interop Types)”를 False로 변경한다.

   

출처 : 자작(userpark.net)

무지개참조 : http://documentation.devexpress.com/#WindowsForms/clsDevExpressSkinsSkinManagertopic

using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;

namespace UserPark
{
    static class Program
    {
        /// <summary>
        /// 해당 응용 프로그램의 주 진입점입니다.
        /// </summary>
        [STAThread]
        static void Main()
        {
            //DevExpress 보너스 스킨 등록(활성화)
            DevExpress.UserSkins.BonusSkins.Register();
            //DevExpress.XtraEditors.XtraForm(SDI Form) 스킨기능 활성화
            DevExpress.Skins.SkinManager.EnableFormSkins();
            //DevExpress.XtraEditors.XtraForm(MDI Form) 스킨기능 활성화
            DevExpress.Skins.SkinManager.EnableMdiFormSkins();
           
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new TfrmMain());
        }
    }
}

Program.cs 파일에 Line 16~21 코드를 추가한다.

※ 반드시는 아니나…. 추천….

자세한 설명은 생략

  • Main 폼에 아래 소스 추가하면 스킨갤러리를 사용할 수 있다.
    • “DevExpress.XtraBars.RibbonGalleryBarItem” or “DevExpress.XtraBars.Ribbon.GalleryControl” 타입으로 “GalleryItemSkins”명으로 생성(추가) 하였을 경우 아래 코드를 소스에 추가하여 준다.
DevExpress.XtraBars.Helpers.SkinHelper.InitSkinGallery(GalleryItemSkins, true);

  • 스킨 종류 선언
    • Program.cs에 아래 소수 추가(“DevExpress Dark Style” 사용시)    ※반드시는 아니나…. 추천….
DevExpress.LookAndFeel.UserLookAndFeel.Default.SetSkinStyle("DevExpress Dark Style");
// or
DevExpress.LookAndFeel.UserLookAndFeel.Default.SkinName = "DevExpress Dark Style";

DevExpress.LookAndFeel.UserLookAndFeel.Default.UseWindowsXPTheme = false;

참조에 COM객체 “Windows Script Host Object Model”(1.0) 추가

 

   1: string fileName = @"Temp.lnk";
   2: string fileExt = Path.GetExtension(fileName);
   3: if (fileExt.Trim().ToLower() == ".lnk")
   4: {
   5:     IWshRuntimeLibrary.WshShell shell = new IWshRuntimeLibrary.WshShell();
   6:     IWshRuntimeLibrary.IWshShortcut link = (IWshRuntimeLibrary.IWshShortcut)shell.CreateShortcut(fileName);
   7:     fileName = link.TargetPath;
   8: }

출처 : 모름

+ Recent posts