파이썬과 플라스크를 사용하여 Sagepay와 양식 통합을 시도하고 있습니다. 이름 = 값 필드 '로 구분 같이 크립트 필드는 일반 텍스트로 다른 모든 거래 정보를 포함해야Python Encrpt PKCS # 5 패딩을 사용하는 MODE_CBC
-
크립트 필드 : 프로세스의
일부는 다음을 수행하는 것입니다 & '문자입니다. 모든 필수 입력란이 있고 '&'문자 뒤에 공백이 없는지 확인하십시오.
- 이 문자열은 제공된 암호를 키 및 초기화 벡터로 사용하고 CCS 모드에서 PKCS # 5 패딩을 사용하여 AES (블록 크기 128 비트)를 사용하여 암호화해야하며 16 진수로 결과를 인코딩해야합니다 대문자).
- Prependthe'@'signtothebeginningoftheencodedresult.*
내가 뭘하려고 완전히 붙어있어이 -이 부분에 따라 URL을 구축했습니다 :
VendorTxCode=TxCode-1310917599-223087284&Amount=36.95&Currency=GBP&Description=description&CustomerName=Fname Surname&[email protected]&BillingSurname=Surname&BillingFirstnames=Fname&BillingAddress1=BillAddress Line 1&BillingCity=BillCity&BillingPostCode=W1A 1BL&BillingCountry=GB&BillingPhone=447933000000&DeliveryFirstnames=Fname&DeliverySurname=Surname&DeliveryAddress1=BillAddress Line 1&DeliveryCity=BillCity&DeliveryPostCode=W1A 1BL&DeliveryCountry=GB&DeliveryPhone=447933000000&SuccessURL=https://example.com/success&FailureURL=https://example.com/failur e
을하지만 지금 필요 PKCS # 5 패딩이있는 AES MODE_CBC를 사용하여 암호화합니다.
PHP의 예제 코드는 다음과 같습니다
static public function encryptAes($string, $key)
{
// AES encryption, CBC blocking with PKCS5 padding then HEX encoding.
// Add PKCS5 padding to the text to be encypted.
$string = self::addPKCS5Padding($string);
// Perform encryption with PHP's MCRYPT module.
$crypt = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $string, MCRYPT_MODE_CBC, $key);
// Perform hex encoding and return.
return "@" . strtoupper(bin2hex($crypt));
}
나는 다음 시도했다 :
from Crypto.Cipher import AES
mycrptobj = AES.new('55a51621a6648525', AES.MODE_CBC, os.urandom(16))
ciphertext = mycryptobj.encrypt('somewords')
그러나 얻을 입력 문자열의 길이가 16의 배수 여야합니다.
So.
나는 다른 스택 오버플로이에 대한 질문하지만 다음 시도했다 : 나는 IV가 무엇인지 모르는
! 임의의 ID를 생성하는 것이 맞습니까? 키를 사용하여 다시 읽기 쇼 내가 IV라고 가정 INITIALISISING 벡터입니다
이 올바른 프로세스입니까? 내가 관리했습니다 관심있는 사람들을위한
감사
알렉스
IV는 암호화 암호와 같아야합니다. –
@RikBlacow - 정보 주셔서 감사합니다, 나는 어젯밤까지 마침내 (!),하지만 여전히 실제 파이썬과 고투하고 있습니다 (심지어 어떤 라이브러리를 포함하여!) –