ajax 요청 을 위주 로 하 는 응용, 데이터 전송 암호 화 솔 루 션
http://en.wikipedia.org/wiki/Diffie%E2%80%93Hellman_key_exchange
client 단 js 언어, 서버 phop 언어 는 DH 키 교환 알고리즘 으로 키 를 교환 합 니 다.
var g = "2";
var p = "106025087133488299239129351247929016326438167258746469805890028339770628303789813787064911279666129";
function doStaff() {
var big_a = randBigInt(100);
var big_p = str2bigInt(p, 10, 0);
var big_g = str2bigInt(g, 10, 0);
var A = powMod(big_g, big_a, big_p);
var str_A = bigInt2str(A, 10);
var B;
var secret;
$.ajax({
url: 'server.php',
type: 'GET',
async: false,
data: {"A":str_A},
cache: false,
timeout: 5 * 1000,
dataType: 'json',
success: function(data, status, xhr) {
B = str2bigInt(data.B, 10, 0);
},
error: function() {
alert(2);
}
});
secret = powMod(B, big_a, big_p);
secret = bigInt2str(secret, 10);
위의 코드 에서 마지막 으로 도착 한 시 크 릿 은 최종 적 으로 서버 와 일치 하 는 키 입 니 다. 위 코드 에서 big int 와 관련 된 js 는 오픈 소스 의 bigint. js (js 코드 는 오픈 소스 가 없 습 니까? ^ ^) 를 직접 사용 합 니 다. 여기 참조:http://leemon.com/crypto/BigInt.js
서버 php 코드:
이 를 통 해 알 수 있 듯 이 우 리 는 고정된 g 와 p 를 사용 하 는데 이 두 변 수 는 공개 적 이 고 누설 을 두려워 하지 않 는 다. js 단 은 먼저 100 bit 길이 의 정수 a 를 생 성하 고 공식 에 따라 A 를 계산 하여 ajax 형식 으로 서버 phop 에 보 냅 니 다. 서버 는 A 를 받 고 변 수 를 생 성 합 니 다. b 는 공식 에 따라 B 를 계산 하여 클 라 이언 트 js 에 응답 합 니 다. 이때 서버 와 클 라 이언 트 는 각각 공식 에 따라 같은 시 크 릿 을 계산 할 수 있 습 니 다. 이 시 크 릿 은 네트워크 에서 전송 되 지 않 았 습 니 다. 쌍방 은 '이심전심' 이 라 고 할 수 있 고 쌍방 이 스스로 선택 한 a 와 b 는 비밀 입 니 다. 제3자 가 공개 적 으로 전송 한 데이터 에 따라 a, b 를 계산 할 수 없습니다. 물론 시 크 릿 을 얻 을 수 없습니다. 이것 이 바로 DH 알고리즘 의 원리 입 니 다.
= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = 화려 한 분할 선 = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = 키 교환 이 끝 난 후, 우 리 는 쌍방 이 대칭 적 으로 암호 화 된 키 를 가지 고 있다 고 가정 합 니 다. 다음은 AES 알고리즘 demo 입 니 다. 각각 js 암호 화 pp 복호화 와 반대로 phop 암호 화 js 복호화 가 있 습 니 다.
crypt - js 라 는 js 라 이브 러 리 를 사 용 했 습 니 다. 공식 주 소 는?http://code.google.com/p/crypto-js/#CryptoJS_3.1 js 암호 화:
var pwd = "123456";
var key = CryptoJS.enc.Utf8.parse("96e79218965eb72c92a549dd5a330112"); //CryptoJS.MD5("111111");
var iv = CryptoJS.enc.Utf8.parse('1234567812345678');
var encrypted = CryptoJS.AES.encrypt(pwd, key, {iv:iv});
document.write(encrypted.toString());
여기에 적 힌 값 은 암호 화 된 비밀문서 입 니 다. toString 방법 으로 얻 을 수 있 습 니 다. crypto - js 문서 에 따 르 면 openssl 형식 을 호 환 하 는 보 이 는 텍스트 형식 입 니 다.
이 값 은 php 에서 복호화 합 니 다:
$iv='1234567812345678';
$key = "96e79218965eb72c92a549dd5a330112";
$data = "FBPJjTRA4MEkMcMDg7eOng==";
$data = base64_decode($data);
$ttt = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, $data, MCRYPT_MODE_CBC, $iv);
echo "decrypted : $ttt";
다음 코드 demo 는 php 단 암호 화, js 복호화 입 니 다.
php 암호 화:
$svrMessage = "server message . .. adfasdfsdaf adfasdfsdaf";
$iv='1234567812345678';
$key = "96e79218965eb72c92a549dd5a330112";
$enc = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $svrMessage, MCRYPT_MODE_CBC, $iv);
$enc = base64_encode($enc);
echo "
$enc";
출력 결 과 는 base 64 를 거 쳐 보 이 는 문자 로 바 뀌 었 습 니 다.
js 복호화:
var received = "UQhDUzgusxZiejMuuVjh78BcpoQt82swQvSqyCvnuTdb3drBJTPghFBmTORflU6h";
var eee = CryptoJS.enc.Base64.parse(received);
var ddd = CryptoJS.AES.decrypt({
ciphertext: CryptoJS.enc.Base64.parse(received),
salt: ""
}, key, {iv:iv});
document.write(ddd.toString(CryptoJS.enc.Utf8) + "
");
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Laravel - 변환된 유효성 검사 규칙으로 API 요청 제공동적 콘텐츠를 위해 API를 통해 Laravel CMS에 연결하는 모바일 앱(또는 웹사이트) 구축을 고려하십시오. 이제 앱은 CMS에서 번역된 콘텐츠를 받을 것으로 예상되는 다국어 앱이 될 수 있습니다. 일반적으로 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.