• 0
OnePeople

Google Speech API

Вопрос

Итак, зарегистрировал свое приложение, читаю пишут для этих API лучше использовать ауниентификацию через service account, ладно создал.

Получил ключ в формате JSON

Иии, что теперь понять не могу, зачем такой огород из способов аунтефикации?

Помогите разобраться!!!

Понял нужен JWT, как сделать RSA256 шифрование?

Изменено пользователем OnePeople

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

6 ответов на этот вопрос

  • 0

Вот набор библиотек для работы с JWT, к сожалению у Delphi там ограниченная поддержка. Может что-то удастся вытащить?

https://jwt.io/

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0
1 час назад, Кривяков Виталий сказал:

Вот набор библиотек для работы с JWT, к сожалению у Delphi там ограниченная поддержка. Может что-то удастся вытащить?

https://jwt.io/

Спасибо нашел нужные библиотеки в другом месте, наконец-то хотя бы авторизировался)))

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

Рано обрадовался один раз прокатило и всё, (Как так??) 

Кто знает в чем суть шифрования  RSASSA-PKCS1-V1_5-SIGN ?

Я беру

 
Спойлер

 


{"alg":"RS256","typ":"JWT"}.
{
"iss":"761326798069-r5mljlln1rd4lrbhg75efgigp36m78j5@developer.gserviceaccount.com",
"scope":"https://www.googleapis.com/auth/prediction",
"aud":"https://www.googleapis.com/oauth2/v4/token",
"exp":1328554385,
"iat":1328550785
}.

Получаю из нах base64

eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiI3NjEzMjY3OTgwNjktcjVtbGpsbG4xcmQ0bHJiaGc3NWVmZ2lncDM2bTc4ajVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLCJzY29wZSI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL2F1dGgvcHJlZGljdGlvbiIsImF1ZCI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL29hdXRoMi92NC90b2tlbiIsImV4cCI6MTMyODU1NDM4NSwiaWF0IjoxMzI4NTUwNzg1fQ

 

 

 

 

Затем идет шифрование

как я понимаю нужно получить SHA256 ключа, с помощью этого же ключа, а затем с помощью полученного ключа уже зашифровать методом RSA то что выше?

Или не так?

The RSA private key is then passed to the RSA signing function, which
   also takes the hash type, SHA-256, and the JWS Signing Input as
   inputs.  The result of the digital signature is an octet sequence,
   which represents a big-endian integer.  In this example, it is:

Вот как это понять?

Изменено пользователем OnePeople

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

Может кто с питона на делфи переделать это

Спойлер

 

def i2osp(x, xLen):
        if x >= 256^xLen:
            raise ValueError("integer too large")
        digits = []

        while x:
            digits.append(int(x % 256))
            x //= 256
        for i in range(xLen - len(digits)):
            digits.append(0)
        return digits[::-1]

def os2ip(X):
        xLen = len(X)
        X = X[::-1]
        x = 0
        for i in range(xLen):
            x += X * 256^i
        return x

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0
42 минуты назад, OnePeople сказал:

Может кто с питона на делфи переделать это

  Скрыть контент

 

def i2osp(x, xLen):
        if x >= 256^xLen:
            raise ValueError("integer too large")
        digits = []

        while x:
            digits.append(int(x % 256))
            x //= 256
        for i in range(xLen - len(digits)):
            digits.append(0)
        return digits[::-1]

def os2ip(X):
        xLen = len(X)
        X = X[::-1]
        x = 0
        for i in range(xLen):
            x += X * 256^i
        return x

 

 

type
  EValueError = class(Exception);
  TDigits = TArray<Integer>;

function i2osp(x, xLen: Integer): TDigits;
var
  I: Integer;
begin
  if x >= 256 xor xLen then
    raise EValueError.Create('integer too large');

  Result := [];
  while x <> 0 do
  begin
    Result := Result + [x mod 256];
    x := x div 256;
  end;

  for I := 0 to xLen - Length(Result) - 1 do
    Result := Result + [0];

  // return digits[::-1] ??
  // SetLength(Result, Length(Result) - 1) ??
end;

function os2ip(x: TDigits): Integer;
var
  I: Integer;
begin
  Result := 0;
  // X = X[::-1]
  // SetLength(x, Length(x) - 1) ??
  for I := 0 to Length(x) - 1 do
    Result := Result + (Result * 256 xor I);
end;

Не претендую на правильный код, но как-то так, что осталось для меня непонятным, так это [::-1]

Изменено пользователем egorea1999
OnePeople и Rusland понравилось это

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!


Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.


Войти сейчас

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу