C초짜가 한계에 부딪쳤네요 ㅠ.ㅠ php->c컨버팅 좀 도와 주세요.
글쓴이: mrbaen / 작성시간: 화, 2008/03/04 - 11:31오전
암복호화 함수 인데요.
php로 되어 있는거를 C로 컨버팅해야 하는데
일주일 넘게 씨름했는데 잘 안되요.ㅠ.ㅠ
C고수님 좀 도와 주세요.
----------------------------------------------------------------------
php source
----------------------------------------------------------------------
function bytexor($a,$b) { $c=""; for($i=0;$i<16;$i++)$c.=$a{$i}^$b{$i}; return $c; } function decrypt_md5($msg,$key) { $string=""; $buffer=""; $key2=""; while($msg) { $key2=pack("H*",md5($key.$key2.$buffer)); $buffer=bytexor(substr($msg,0,16),$key2); $string.=$buffer; $msg=substr($msg,16); } return($string); } function encrypt_md5($msg,$key) { $string=""; $buffer=""; $key2=""; while($msg) { $key2=pack("H*",md5($key.$key2.$buffer)); $buffer=substr($msg,0,16); $string.=bytexor($buffer,$key2); $msg=substr($msg,16); } return($string); } // 사용 예 $message = "다양한 원본 메시지 東西南北 ABC abc 123 ※ ↔ "; $key = "아..이정도면 매우 복잡한 키--1;"; $encrypted = encrypt_md5($message, $key); $decrypted = decrypt_md5($encrypted, $key); echo "Encrypted = $encrypted"; echo " <HR>"; echo "Decrypted = $decrypted";
Forums:
일주일넘게 씨름한
일주일넘게 씨름한 소스는 어딧나요? 그걸보여줘야 문제를 잡아드리죠.
일주일 넘게 씨름한
일주일 넘게 씨름한 쏘스 입니다 ㅠ.ㅠ
초짜 라서 개념 없이 작업됬습니다.
이해하고 봐주세요.
일주일 넘게 씨름한
탭간격 을 없어져서 보기 힘들것 같아요.
등으로 소스를
<code> 등으로 소스를 감싸주시면 좋겠네요...
어떤 코드를 넣으면 되나요?
어떤 코드를 넣으면 소스가 정리돼서 보이나요?
이걸로는 감쌌는데 별 효과가 없는듯해요
설날부턴
☆━2008년*♡*┐┃설날부턴 ° ː│。°더많이°│ː 。사랑할께~┃└*♡* *
아놔
ㅡㅡ;
ㅡㅡ;;;
흠.. 일단.. PHP 는
흠.. 일단..
PHP 는 간단한데.. C소스는 왜이렇게 길죠?
C로 한다고 해서 별로 길어질 이유는 없어보이는데.
컨버팅하셨는데.. 대응되는함수만 만드시면 될꺼 같은데.. 다른것들도 나오는거 같고..
구현하신고도좀..뭔가 정리가 안된느낌이네요..
일단 생각부터 정리하시고.. 대응되는 함수로 만드시기바랍니다.
하나 예로 보면 Trim 함수.. 왜이렇게 긴지..ㅡㅡ;;
이거 그냥 스트링 스페이스 잘라내는 함수 아닌가요? 보통트림이면 그런기능인데..
뭘할려는건지 모르겠지만..
마지막에 포인터도 잃어버리고..ㅡㅡ;; 이 자체부터 오류네요..
일단 함수하나부터 만들어서 재대로 동작하는지 해보시기 바랍니다.
그리고 보통 구현되어 있거나 일반적으로 구현하는방법(기존소스)를좀 참고 하심이 좋을듯하네요.
참고로 트림이라면 매우 간단하게 됩니다. 메모리 할당도 필요 없고요..
초짜의 한계죠 ㅠ.ㅠ
초짜의 한계죠
사실 개념만 알고 있고 포인터니 하는거 정확하게 어떻게 돌아가는지 잘 몰르는 상태에서 작업을 하다보니
점점 개판이 되가네용
Trim그냥
Trim그냥 생각나는데로 적어봅니다.
void Trim( char *str )
{
char *s;
for( s = str +strlen(str) -1; s >= str; s-- )
if( *s = ' ' ) *s = 0;
else break;
}
안돌려봤지만 뭐 이정도 하면 돌지 않을까 싶네요..
제가 구현해논거는 문자열의 양쪽 공백을 없애는 함수입니다.
제가 구현해논거는 문자열의 양쪽 공백을 없애는 함수입니다.
여기저기 소스 구해서 만들은겁니다.
전 rtrim 이군요..trim
전 rtrim 이군요..
trim 이라도 별반차이는 없겠죠..
for( s = str; *s; s++ ) if( *s != ' ' )break;
memmove( str, s, strlen(str) - (s - str) +1);
두줄정도 추가하면 되지 않을까 싶군요..
php 코드를 보니까 꼭
php 코드를 보니까 꼭 perl 코드 같네요.
perl 코드를 가끔씩 c로 변환하고는 하는데,
그때 이런식으로 처리하곤 합니다.
배열에 대응하기 위한 간단한 리스트를 만드시거나 있는거 사용하시고,
함수의 인자 및 리턴 타입만 잘 고려하셔서 pack, substr 함수 구현하시면 되겠네요.
일반적인 pack이나 substr 만드려면 고민해야겠지만,
지금 내가 이 프로그램에서 사용할 기능을 한정한 pack이나 substr을 만드는 건 뭐.. :-)
어렵게 생각하지 마시고 일단,
php 코드와 똑같이 1대1 대응하는 식으로 작성하시면 쉽습니다.
최적화는 일단 신경쓰지 마시구요. :-)
---------------------------
Smashing Watermelons~!!
Whatever Nevermind~!!
Keedi Kim
----
use perl;
Keedi Kim
댓글 달기