VFP ·R¥ÎªÌªÀ°Ï ­º­¶ VFP ·R¥ÎªÌªÀ°Ï
¥»°Q½×°Ï¬° Visual Foxpro ·R¥ÎªÌ¸gÅç¥æ¬yªº¦a¤è, ½Ð¦h¦h§Q¥Î"·j´M"ªº¥\¯à, ¥ý¬d¬Ý¬Ý¦³µL«e¨Ò¥i´`, ¦pªGÁÙ¦³¤£À´ªº¦Aµo°Ý. ³¡¥÷¥DÃD¦³ªþ¥[ÀÉ®×, ¶·¥ýµù¥U¦¨¬°ªÀ°Ï©~¥Á¤~¥i¥H¤U¸ü.
 
 ±`¨£°ÝÃD±`¨£°ÝÃD   ·j´M·j´M   ·|­û¦Cªí·|­û¦Cªí   ·|­û¸s²Õ·|­û¸s²Õ   ·|­ûµù¥U·|­ûµù¥U 
 ­Ó¤H¸ê®Æ­Ó¤H¸ê®Æ   µn¤JÀˬd±zªº¨p¤H°T®§µn¤JÀˬd±zªº¨p¤H°T®§   µn¤Jµn¤J

3DES ¥[±K°ÝÃD, ¨D°ª¤âÀ°¦£¬Ý¬Ý

 
µoªí·s¥DÃD   ¦^ÂÐ¥DÃD    VFP ·R¥ÎªÌªÀ°Ï ­º­¶ -> VFP °Q½×°Ï
¤W¤@½g¥DÃD :: ¤U¤@½g¥DÃD  
µoªí¤H ¤º®e
jimmy987



µù¥U®É¶¡: 2003-06-26
¤å³¹: 33


²Ä 1 ¼Ó

µoªíµoªí©ó: ¬P´Á¤G ¤Q¤ë 24, 2023 12:22 pm    ¤å³¹¥DÃD: 3DES ¥[±K°ÝÃD, ¨D°ª¤âÀ°¦£¬Ý¬Ý ¤Þ¨¥¦^ÂÐ

¤p§Ì³Ìªñ¦³¤@­Ó3DES ¥[±K°ÝÃD, ¤£ª¾VFP­n¦p¦ó¼g¤~·|¥¿½T
³o¬O¼t°Ó´£¨ÑªºC# µ{§Ç, ­n¦p¦ó¼g¦¨VFPµ{§Ç
Inputdata : ºÝ¥½¥æ©ö§Ç¸¹6½X+¯S©±¥N¸¹15½X+¥æ©ö¤é´Á8½X+ºÝ¥½¥N¸¹8½X+¥æ©ö®É¶¡6½X+¦¬³æ¦æ¥N½X3½X+©T©w­È00¡C(¦@48 bytes)
Inputdata :151726006868635311001202310191001500115172600600 (¦¹­È­ngetBytes)

ÅçÃҰѼÆ:F1A81B8C69D4DB7FEBFCEE46985172DB (¦¹­È­nHexToByte)

IV:FOCASAPI (¦¹­È­ngetBytes)

¥[±K«áªº­ÈÂনHEX String:FF1B68F015357E86C877EA4D75ACB0A1C774ED26EF2670C4E40B65D2CDFE108E96E532F89FB911EAFB8EEFE7995BEC2E

3DES CBC µLPadding.



C#½d¨Òµ{¦¡½X¡G

string input = traceNumber + merchantId + localdate + terminalId + localtime + acqBank + "00";
byte[] b_input = System.Text.Encoding.UTF8.GetBytes(input);
byte[] iv = System.Text.Encoding.UTF8.GetBytes("FOCASAPI");
byte[] result = TripleDEScrypto.Encrypt(b_input, HexToByte(key.Text), iv , CipherMode.CBC , PaddingMode.None);
string termvericode = ToHexString(result);
termvericode = termvericode.Substring(termvericode.Length - Cool;

public static byte[] Encrypt(byte[] toEncrypt, byte[] Key, byte[] IV , CipherMode mode,PaddingMode padding) {
try
{
TripleDESCryptoServiceProvider symcsp = new TripleDESCryptoServiceProvider();
symcsp.Mode = mode;
symcsp.Padding = padding;
symcsp.Key = Key;
if (mode != CipherMode.ECB)
{
symcsp.IV = IV;
}
return Encrypt(toEncrypt, symcsp);
}

catch (CryptographicException e)
{
throw new Exception("TripleDEScrypto.Encrypt Error: " + e.Message, e);
}
}


public static byte[] Encrypt(byte[] toEncrypt, SymmetricAlgorithm symcsp)
{
try
{
MemoryStream mStream = new MemoryStream();
CryptoStream cStream = new CryptoStream(mStream, symcsp.CreateEncryptor(),
CryptoStreamMode.Write);
cStream.Write(toEncrypt, 0, toEncrypt.Length);
cStream.FlushFinalBlock();
byte[] ret = mStream.ToArray();
cStream.Close();
mStream.Close();
return ret;
}

catch (CryptographicException e)
{
throw new Exception("TripleDEScrypto.Encrypt Error: " + e.Message, e);
}
}


§Ú¼gªºVFPµ{§Ç¦p¤U, ¤£ª¾¿ù¦b¦ó³B:
°õ¦æ¤U­±¨ç¼Æ¨D­È:
? des3('151726006868635311001202310191001500115172600600','F1A81B8C69D4DB7FEBFCEE46985172DB','FOCASAPI',0,'cbc')


********
*3DES¥[±K, CBC ,ECB
*lcdata=¥[±Kªº¦r¦ê
*lcpass=¥[±Kªºhashkey
*lciv=IV­È
*lcPadding=Padding­È, ¤@¯ë¬°0
*lctype=¥[±K«¬ºA, cbc, ecb
*¦^¶Ç: 3desªº¥[±K­È
********
FUNCTION DES3
LPARAMETERS lcdata,lcpass,lciv,lcPadding,lctype

IF TYPE('lcdata')<> 'C'
MESSAGEBOX('¥[±Kªº¸ê®Æ¥²¶·¬°¦r¦ê')
RETURN .F.
ENDIF
IF TYPE('lcpass')<> 'C'
MESSAGEBOX('¥[±Kªºhashkey¥²¶·¬°¦r¦ê')
RETURN .F.
ENDIF
IF TYPE('lciv')<> 'C'
MESSAGEBOX('IV¥²¶·¬°¦r¦ê')
RETURN .F.
ENDIF
IF TYPE('lcPadding')<> 'N'
lcPadding=0
ENDIF

IF UPPER(lctype)='CBC' OR UPPER(lctype)='ECB'
ELSE
MESSAGEBOX('¥[±K«¬ºA¤£¹ï, ¥²¶·¬°CBC©ÎECB',0+16,'¨t²Î³qª¾')
RETURN .f.
ENDIF

LOCAL loCrypt
LOCAL lcIvHex
LOCAL lcKeyHex
LOCAL lcEncStr
LOCAL lcDecStr
LOCAL crlf
crlf=CHR(13)+CHR(10)


**********
loCrypt = CreateObject('Chilkat_9_5_0.Crypt2')

* Specify 3DES for the encryption algorithm:
* «ü©w¥[±Kºâªk¬°3DES¡G
loCrypt.CryptAlgorithm = "3des"

* CipherMode may be "ecb" or "cbc"
loCrypt.CipherMode = LOWER(lctype) &&"cbc"

* KeyLength must be 192. 3DES is technically 168-bits;
* the most-significant bit of each key byte is a parity bit,
* so we must indicate a KeyLength of 192, which includes
* the parity bits.
loCrypt.KeyLength = 192

* The padding scheme determines the contents of the bytes
* that are added to pad the result to a multiple of the
* encryption algorithm's block size. 3DES has a block
* size of 8 bytes, so encrypted output is always
* a multiple of 8.
loCrypt.PaddingScheme = lcPadding

* EncodingMode specifies the encoding of the output for
* encryption, and the input for decryption.
* It may be "hex", "url", "base64", or "quoted-printable".
loCrypt.EncodingMode = "hex"

* An initialization vector is required if using CBC or CFB modes.
* ECB mode does not use an IV.
* The length of the IV is equal to the algorithm's block size.
* It is NOT equal to the length of the key.
lcIvHex = get_ascstr(lciv)
loCrypt.SetEncodedIV(lcIvHex,"hex")

* The secret key must equal the size of the key. For
* 3DES, the key must be 24 bytes (i.e. 192-bits).

lcKeyHex = hextobytes(lcpass)
loCrypt.SetEncodedKey(lcKeyHex,"hex")


* Encrypt a string...
* The input string is 44 ANSI characters (i.e. 44 bytes), so
* the output should be 48 bytes (a multiple of Cool.
* Because the output is a hex string, it should
* be 96 characters long (2 chars per byte).

inputdata=get_ascstr(lcdata)
lcEncStr = loCrypt.EncryptStringENC(inputdata)

=STRTOfile('inputdata:'+lcdata+crlf,'c:\3des.txt',0)
=STRTOfile('inputdata getbytes value:'+inputdata+crlf,'c:\3des.txt',1)

=STRTOfile('lcKeyHex:'+lcpass+crlf,'c:\3des.txt',1)
=STRTOfile('lcKeyHex hextobytes:'+lcKeyHex+crlf,'c:\3des.txt',1)

=STRTOfile('IV:'+lciv+crlf,'c:\3des.txt',1)
=STRTOfile('IV getbytes value::'+lcIvHex+crlf,'c:\3des.txt',1)

=STRTOfile('¥[±K«áªº­È:'+lcEncStr+crlf,'c:\3des.txt',1)

* Now decrypt:
* ²{¦b¸Ñ±K¡G
lcDecStr = loCrypt.DecryptStringENC(lcEncStr)
? lcDecStr
=STRTOfile('¸Ñ±K«áªº­È:'+lcDecStr+crlf,'c:\3des.txt',1)

RELEASE loCrypt
RETURN lcEncStr


**********************
*»¡©ú: ¤@­Ó16¶i¦ì¦r¦êÂনbyte¼Æ¦r¦r¦ê
*°Ñ¼Æ: getstr1=­nÂà´«ªº16¶i¦ì¦r¦ê
*ªð¦^: ¤@­Ó10¶i¦ì½s½X¦r¦ê(¤j¼g)
*½d¨Ò: hextobytes('F1A81B8C69D4DB7FEBFCEE46985172DB')
*µ²ªG: 241168271401052122191272352522387015281114219
***********************
FUNCTION hextobytes
LPARAMETERS getstr1
LOCAL ret_str,ii,ii_end
IF TYPE('getstr1')<> 'C'
RETURN ''
ENDIF
ret_str=''
ii_end=LEN(getstr1)/2
FOR ii=0 TO ii_end-1
ret_str=ret_str+TRANSFORM(hex2dec(SUBSTR(getstr1,ii*2+1,2)))
ENDFOR
RETURN ret_str


***********************
*»¡©ú: ¤@­Ó¦r¦êÂনbyte¼Æ¦r¦r¦ê
*°Ñ¼Æ: getstr1=­nÂà´«ªº¦r¦ê
*ªð¦^: ¤@­Ó10¶i¦ì½s½X¦r¦ê(¤j¼g)
*½d¨Ò: get_ascstr('this is qrcode')
*µ²ªG: 116104105115321051153211311499111100101

***********************
FUNCTION get_ascstr
LPARAMETERS getstr1
LOCAL ret_str,ii,ii_end
IF TYPE('getstr1')<> 'C'
RETURN ''
ENDIF
ret_str=''
ii_end=LEN(getstr1)
FOR ii=1 TO ii_end
ret_str=ret_str+TRANSFORM(ASC(SUBSTR(getstr1,ii,1)))
ENDFOR
RETURN ret_str


***************
*¤Q¤»¶i¨î->¤Q¶i¨îÂà´«¨ç¼Æ¡A
***************
FUNCTION hex2dec
PARAMETERS hexnum

STORE 0 TO decnum
STORE '' TO tempnum
IF LEN(ALLTRIM(hexnum)) < 4
hexnum = PADL(hexnum, 4, '0')
ENDIF ( LEN(ALLTRIM(hexnum)) < 4 )
STORE LEN(hexnum)-1 TO indx

FOR i = 1 TO LEN(hexnum)
DO CASE
CASE SUBSTR(UPPER(hexnum), i, 1) == "F"
tempnum = '15'
CASE SUBSTR(UPPER(hexnum), i, 1) == "E"
tempnum = '14'
CASE SUBSTR(UPPER(hexnum), i, 1) == "D"
tempnum = '13'
CASE SUBSTR(UPPER(hexnum), i, 1) == "C"
tempnum = '12'
CASE SUBSTR(UPPER(hexnum), i, 1) == "B"
tempnum = '11'
CASE SUBSTR(UPPER(hexnum), i, 1) == "A"
tempnum = '10'
OTHERWISE
tempnum = SUBSTR(hexnum, i, 1)
ENDCASE
decnum = decnum + (VAL(tempnum) * (16^indx))
indx = indx - 1
ENDFOR ( i )
RETURN decnum


±o¨ìµ²ªG¬°:
inputdata:151726006868635311001202310191001500115172600600
inputdata getbytes value:495349555054484854565456545153514949484849504850514948495749484849534848494953495550544848544848
lcKeyHex:F1A81B8C69D4DB7FEBFCEE46985172DB
lcKeyHex hextobytes:241168271401052122191272352522387015281114219
IV:FOCASAPI
IV getbytes value::7079676583658073
¥[±K«áªº­È:D9D1F5BBCF2202B4D00154937DAEAD4B31BCC48ACE13B39C706565F0DCB1B9650978AC83EE3E2B95BAAA2716B3DB4CF92CC90A334106506FE435B380C5EF80ADA7F05D952B327FEC4903AA50CC0EABBF621FB83A1EF827A585E0AE86BD501E49BAF0A6FF04B1CF5D
¸Ñ±K«áªº­È:495349555054484854565456545153514949484849504850514948495749484849534848494953495550544848544848
¦^³»ºÝ
À˵ø·|­û­Ó¤H¸ê®Æ µo°e¨p¤H°T®§ µo°e¹q¤l¶l¥ó
jimmy987



µù¥U®É¶¡: 2003-06-26
¤å³¹: 33


²Ä 2 ¼Ó

µoªíµoªí©ó: ¬P´Á¤T ¤Q¤ë 25, 2023 1:46 pm    ¤å³¹¥DÃD: ¦³¿³½ì±N¤W­zC#µ{¦¡,»s§@¦¨FOXPRO¥i¥HŪ¨úªºDLL, ¥i¥H³ø»ùµ¹§Ú ¤Þ¨¥¦^ÂÐ

¦³¿³½ì±N¤W­zC#µ{¦¡,»s§@¦¨FOXPRO¥i¥HŪ¨úªºDLL, ¥i¥H³ø»ùµ¹§Ú
§ÚªºEMAIL:trh28525@yahoo,com.tw
«H¤¤µ¹§Ú¤@­Ó³ø»ù¤Î¦h¤[¥i¥H§¹¦¨®É¶¡¤ÎÁpµ¸¤è¦¡, ÁÂÁÂ..

¦bfoxpro ¿é¤J¨ç¼Æ¦p: t3des(Inputdata ,KEY,IV,0,'cbc')
t3des('151726006868635311001202310191001500115172600600','F1A81B8C69D4DB7FEBFCEE46985172DB','FOCASAPI',0,'cbc')
·|±o¨ì¦^¶Ç­È:FF1B68F015357E86C877EA4D75ACB0A1C774ED26EF2670C4E40B65D2CDFE108E96E532F89FB911EAFB8EEFE7995BEC2E
¦^³»ºÝ
À˵ø·|­û­Ó¤H¸ê®Æ µo°e¨p¤H°T®§ µo°e¹q¤l¶l¥ó
iswith



µù¥U®É¶¡: 2022-11-04
¤å³¹: 39


²Ä 3 ¼Ó

µoªíµoªí©ó: ¬P´Á¥| ¤Q¤ë 26, 2023 7:22 pm    ¤å³¹¥DÃD: ¤Þ¨¥¦^ÂÐ

¦n¹³§Únetsuite.dll ¤¤¦³这个3 ¦¸des¨ç数,§A¥i¥H¥[§ÚWX¡GZ68256904¡A¥ý试¦Z给费¥Î
¦^³»ºÝ
À˵ø·|­û­Ó¤H¸ê®Æ µo°e¨p¤H°T®§
iswith



µù¥U®É¶¡: 2022-11-04
¤å³¹: 39


²Ä 4 ¼Ó

µoªíµoªí©ó: ¬P´Á¥| ¤Q¤ë 26, 2023 7:26 pm    ¤å³¹¥DÃD: ¤Þ¨¥¦^ÂÐ

*DESEncode(cstr,ckey,@cErrorMsg,nCipherMode,nPaddingMode)
*cstr ¥²传
*ckey ¥²传
*cErrorMsg ¥²传 Éݱ`«H®§
*nCipherMode «D¥²传 Àq认­È ECB «ö»Ý nCipherMode©wúå
*nPaddingMode «D¥²传 Àq认­È Zeros «ö»Ý PaddingMode©wúå
*¥¢败ªð¦^ªÅ¦ê,µM¦Z¨ú¥XlcErrorMsg



*DESDecode(cstr,ckey,@cErrorMsg,nCipherMode,nPaddingMode)
*cstr ¥²传
*ckey ¥²传
*cErrorMsg ¥²传 Éݱ`«H®§
*nCipherMode «D¥²传 Àq认­È ECB «ö»Ý nCipherMode©wúå
*nPaddingMode «D¥²传 Àq认­È Zeros «ö»Ý PaddingMode©wúå
*¥¢败ªð¦^ªÅ¦ê,µM¦Z¨ú¥XlcErrorMsg
¦^³»ºÝ
À˵ø·|­û­Ó¤H¸ê®Æ µo°e¨p¤H°T®§
jimmy987



µù¥U®É¶¡: 2003-06-26
¤å³¹: 33


²Ä 5 ¼Ó

µoªíµoªí©ó: ¬P´Á¤­ ¤Q¤ë 27, 2023 6:30 pm    ¤å³¹¥DÃD: ·PÁÂiswith¤j¤jÀ°¦£, À°¦£§¹¦¨DLL»s§@ ¤Þ¨¥¦^ÂÐ

·PÁÂiswith¤j¤jÀ°¦£, À°¦£§¹¦¨DLL»s§@¤Î­×§ï, ³t«×§Ö¤S¦n, ¶}µo¶O¥Î, §Ú·|§ÖÂI¶×µ¹§A.
¦^³»ºÝ
À˵ø·|­û­Ó¤H¸ê®Æ µo°e¨p¤H°T®§ µo°e¹q¤l¶l¥ó
±q¤§«eªº¤å³¹¶}©lÅã¥Ü:   
µoªí·s¥DÃD   ¦^ÂÐ¥DÃD    VFP ·R¥ÎªÌªÀ°Ï ­º­¶ -> VFP °Q½×°Ï ©Ò¦³ªº®É¶¡§¡¬° ¥x¥_®É¶¡ (GMT + 8 ¤p®É)
²Ä1­¶(¦@1­¶)

 
«e©¹:  
±z µLªk ¦b³o­Óª©­±µoªí¤å³¹
±z µLªk ¦b³o­Óª©­±¦^ÂФ峹
±z µLªk ¦b³o­Óª©­±½s¿è¤å³¹
±z µLªk ¦b³o­Óª©­±§R°£¤å³¹
±z µLªk ¦b³o­Óª©­±¶i¦æ§ë²¼
±z µLªk ¦b³o­Óª©­±ªþ¥[ÀÉ®×
±z µLªk ¦b³o­Óª©­±¤U¸üÀÉ®×


Powered by phpBB © 2001, 2005 phpBB Group
¥¿Å餤¤å»y¨t¥Ñ phpbb-tw ºûÅ@»s§@